use strict; use warnings; use Smart::Comments; my %n = (val=>return_nothing()); my %u = (val=>return_undef()); ### %n ### %u sub return_nothing{ return; } sub return_undef{ return undef; }
$ perl a.pl Odd number of elements in hash assignment at /home/tmp/a.pl line 5. ### %n: { ### val => undef ### } ### %u: { ### val => undef ### }
ただの return; だと、ハッシュの初期化に使った場合 "Odd number of elements in hash assignment" などという警告が出るみたい。
結果はどっちでも同じなんだけど、明示的にreturn undef;としておいたほうが良い(場合もある)みたい。
追記
調べてみると結構おなじようなこと考えてる人がいた。
Use a bare return to return failure
404 Blog Not Found:perl - (undef) is true
返り値で失敗を報告する時は、裸の return をもってせよ
ふーむ。
print "return_nothing is " . ((return_nothing()) ? "TRUE" : "FALSE") . "\n"; print "return_undef is " . ((return_undef()) ? "TRUE" : "FALSE") . "\n";
return_nothing is FALSE return_undef is FALSE
$ perl -v This is perl 5, version 22, subversion 2 (v5.22.2) built for cygwin-thread-multi
ふーむ。。
return undefしてもfalseになるっぽいけど、バージョン依存なんだろうか。
まあ何にせよ、成功・失敗を返り値で判断するような場合はただのreturn、値を返すときはreturn undefと使い分ける感じが良いということかな。