タグ

perlとoverrideに関するkiyo_hikoのブックマーク (2)

  • Perl の関数をオーバーライドする

    一時的なオーバーライド (Foo.pm) package Foo; use strict; use warnings; sub bar { my $baz = shift; $baz * 2; } 1; (hoge.pl) #!/usr/bin/perl use strict; use warnings; use Perl6::Say; use Foo; say Foo::bar(3); # 6 { no warnings 'redefine'; local *Foo::bar = sub { my $baz = shift; $baz ** 2; }; say Foo::bar(3); # 9 } say Foo::bar(3); # 6 関数を、local で一時的に上書きする。 no warnings 'redefine'; は関数の再定義を許してね、という宣言。 no warnin

    Perl の関数をオーバーライドする
    kiyo_hiko
    kiyo_hiko 2023/06/26
    既存の関数を乗っ取るとき「*Package::method = sub { "code ref." }」するって話。更に自分の場合、特定のときにオーバライド前の関数呼びたくなった→試した結果これは先に「*Backup::method = \&Package::method」でできることがわかった
  • override prototype

    kiyo_hiko
    kiyo_hiko 2011/10/19
    Perlのプロトタイプは、高階関数でのブロック記法以外のメリットがわからないな。なんか不自然なコードのにおいがして気になるが、あとでちゃんと読もう。ちなみにプロトタイプでのオーバーロードはやっぱり無理(X-P)
  • 1