Perl日記

PerlとかRubyとかPHPとかPythonとか

サブルーチンのアンパサンド「&」

Perlを勉強したときに覚えたサブルーチンの呼び出し方は、サブルーチン名の前に必ずアンパサンド(「&」)をつける、というものだった。
それから「初めてのPerl」を読み、「Perlベストプラクティス」を読み、でやっとその意味が分かった(と思う)のでメモ。

「&」をつけて起動

  • 組み込み関数と同じ名前の自作サブルーチンを100%呼び出せる。

「&」なしで起動

  • 組み込み関数と同じ名前の自作サブルーチンだと、組み込み関数が優先。(自作の方も呼び出せる? よく分からない。)
  • 引数の括弧を省略するには、呼び出し元がサブルーチンの定義場所より後に来ないといけない。
  • 引数の括弧をつければ、呼び出し元の位置などは無関係になる。

sub print {
  print "MyPrint : ", @_;
}
print "ID : rightgo09","\n"; #=> 組込関数なので括弧は省略可
&print("ID : rightgo09","\n"); #=> 括弧は必須
#=> ID : rightgo09
#=> MyPrint : ID : rightgo09

sub myprint {
  print "MyPrint : ", @_;
}
myprint "ID : rightgo09","\n"; #=> 括弧は省略可
#=> MyPrint : ID : rightgo09

myprint("ID : rightgo09","\n"); #=> 括弧は必須
sub myprint {
  print "MyPrint : ", @_;
}
#=> MyPrint : ID : rightgo09