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の関数の引数は基本的に参照渡しということが関係しているような気がするのだが、
詳しいことは良く分からない。
※コメント投稿者のブログIDはブログ作成者のみに通知されます