変数に値があるかどうか
いい加減以下のようなところが見るに耐えなくなったので。
$trgt; ........ # 何か処理 if ($trgt ne "") { EXPR; }
このままuse warningsすると(されてなかったので)、$trgtに値が入っていない場合、以下の警告が出る。
#=> Use of uninitialized value in string ne at - line 3.
最近でこそ慣れたけれど、Perl勉強したての頃はよくこの警告を消すのに苦労していた。
それがここにきてまた対峙することになろうとは。
単純に if ($trgt) にしちゃうと、0 とか q{} に対応できないんだよなーと思いつつ、こんなサブルーチンを作った。
sub def { if (defined($_[0]) and q{} ne $_[0]) { return 1; } return; }
if (def($trgt)) { EXPR; }
サブルーチン呼び出しはコストがかかるみたいなのを見た気がするけれど、そんなパフォーマンスにシビアなとこじゃないし、第一そんなことを言ってられないのでこれでいこう。