Hatena::ブログ(Diary)

bingo_nakanishiの他言語出身者のためのPerl入門

2009-06-18

第124回 サブルーチンの頭に&は普通つけない

21:01 | 第124回 サブルーチンの頭に&は普通つけないを含むブックマーク

Perlの謎(その1):変数等の頭文字って何を意味するの? - 燈明日記

『&』が付くシンボルは、サブルーチンで、実は『&』を頭に付けるより、尾に『()』をつけてサブルーチンを明示する方が多いです。

おせっかいな、トラックバックで大変申し訳ないのですが、

少しだけ補足をさせてください。


私も初めはサブルーチンの頭に&を付けていたのですが(正確にいうと付けるのか付けないのかすごく悩んでいた)、これはPerl4のときには必要でしたが、Perl5からは不要になりました。



私が教えてもらったときのものを引用します。

関数と演算子 - deq blog

Perl の 関数で &あっても なくても文脈で判断してくれると ありますが、、

あれも なんか納得いかないですねぇ 結局 どっちにすべきなんだと。。。


答え:関数呼び出しに単項前置演算子 & は使いません。

もともと,Perl 4ではビルトイン関数は & が不要,ユーザ定義関数の呼び出しには前に & をつけなければなりませんでした。しかし,Perl 5ではユーザ定義関数の呼び出しに & をつけないように変更になりました。しかし,Perl 4時代のプログラムも修正無しで動かしたいため,& をつけても関数呼び出しが行えるようになっています。しかしこれはすでに廃止された仕様なので,関数呼び出しの頭に & をつけるのは止めましょう。



ちなみにこの件は、

Perlベストプラクティス

Perlベストプラクティス

にも紹介されていました。


また、この話は、

第120回 Perlらしく書くための5つの極意 - bingo_nakanishiの他言語出身者のためのPerl入門

極意1 「組み込み関数のカッコは書かない」

と関係があり、カッコの有無だけで組み込み関数と自分が作った関数を区別できるというメリットがあります。



ということで、おせっかいなトラックバック失礼いたしました...

chaichanPaPachaichanPaPa 2009/06/18 21:56 id:bingo_nakanishi_perlさん、いつもお世話になっています。
全然、おせっかいでないです。
実は、『&』はイマイチあいまいに理解していたので、助かりました。
トラックバック、ありがとうございました。

トラックバック - http://d.hatena.ne.jp/bingo_nakanishi_perl/20090618/1245326468
Connection: close