IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

Perlのreturn

      2014/02/28

ちょっと前に作ったプログラムを見ていて、悪い習慣だなぁ、と思ったので、改めるためにメモ。
Perlを覚えていく中で、関数の返り値を偽として判定させたいときは「undefを返す」という事をやっていた。

しかし、これは返り値を配列で受け取るときに微妙になり、わかりにくいバグを発生させてしまう原因にもなる。
どういう場合に問題になるかを、実際にコードを書いて試してみる。

このスクリプトを実行すると結果はそれぞれどうなるでしょうか?
しばらく考えてみて下さい。


答えは以下のようになります。

いかがでしょうか?
undefを返したのに、分岐で「真」になっていますね。
これは、if文が@resultを要素数で判定したためです。
undefを返すと、見ての通り@resultに「undef」が代入されます。
そのため、@resultの判定が1となり、真となります。
期待したのは「return_only」のような動作ではないでしょうか?
return undef;は悪癖です。
理解してやる場合は別ですが、殆どの場合は単独のreturnが良いでしょう。

respo

respo link

ZenBackWidget

 - 情報技術について