前回に引き続いて関数の戻り値についてのメモ。
#!/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 のバージョンでも結果が違うとかあるかも? まぁ、月並みなまとめですが、関数の戻り値は手を抜かずに明示するようにしましょう。