Hyper-研究所@宴

春風の 花を散らすと見る夢は 覚めても胸の さわぐなりけり

Perlバグ

2009年01月23日 01時16分57秒 | Weblog
return <exp1> and <exp2>;
exp1とexp2の評価式が両方とも真である場合のみ真を返却したいと思ってこう書いたが、これでは良くない。
なぜかというと、Perlにおいてand演算子は結合力が非常に弱く、
(return <exp1>) and (<exp2>);
と解釈されてしまうからだ。
return <exp1> && <exp2>;
ならおk・・・なはず。

もう一つ、
&hogefunc ($foovar, &fugafunc, $barvar);
sub hogefunc {
    my $foo = shift;
    my $fuga = shift;
    my $bar = shift;
}
という関数を定義して使ったとき、
もし &fugafunc の戻り値が未定義値(undef)だった場合、
  • $fooに$foovarの値が、
  • $fugaに$barvarの値が、
  • そして$varに未定義値が
代入されてしまう。
つまり、 &fugafunc が省略されてしまうということ。
原因は良く分からないが、一度変数に代入してやるとこの問題は回避できる。
すなわち、
my $fugavar = &fugafunc;
&hogefunc ($foovar, $fugavar, $barvar);
とする。
たぶん、Perlの関数の引数は基本的に参照渡しということが関係しているような気がするのだが、
詳しいことは良く分からない。
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« スネークとネメシス触った | トップ | ゲイツの試験 »
最新の画像もっと見る

コメントを投稿

Weblog」カテゴリの最新記事