前回に引き続いて関数の戻り値についてのメモ。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
$, = $ = "
";
sub if_true {
if (1) { 'in block'; }
}
print __LINE__, Dumper (if_true);
sub if_false {
if (0) { 'in block'; }
}
print __LINE__, Dumper (if_false);
sub unless_true {
unless (1) { 'in block'; }
}
print __LINE__, Dumper (unless_true);
sub unless_false {
unless (0) { 'in block'; }
}
print __LINE__, Dumper (unless_false);
9 $VAR1 = 'in block'; 14 $VAR1 = 0; 19 $VAR1 = ''; 24 $VAR1 = 'in block';
if_true、if_false、unless_false は予想通りの結果でしたが、unless_true の戻り値は 0 でも undef でもなく空文字列なんですね。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
$, = $ = "
";
sub if_true {
'string' if 1;
}
print __LINE__, Dumper (if_true);
sub if_false {
'string' if 0;
}
print __LINE__, Dumper (if_false);
sub unless_true {
'string' unless 1;
}
print __LINE__, Dumper (unless_true);
sub unless_false {
'string' unless 0;
}
print __LINE__, Dumper (unless_false);
9 $VAR1 = 'string'; 14 $VAR1 = 0; 19 $VAR1 = 1; 24 $VAR1 = 'string';
こちらは、先の結果と異なり、予想通りでした。unless_true の挙動が違いますね。
試せていませんが、もしかしたら、Perl のバージョンでも結果が違うとかあるかも? まぁ、月並みなまとめですが、関数の戻り値は手を抜かずに明示するようにしましょう。