SYNOPSIS
変数の存在チェックと出力を 1line で行う書き方.
丁寧な?書き方と比較して書きました.
CODE
下のコードと同様のを Gist にも置いておきます.
variable_check.pl
variable_check.pl
#!/usr/bin/env perl
use strict;
use warnings;
# こんな変数がありましたとさ
my $data = { param => "foo\n" };
for (0..1) {
# 丁寧に?書くとこうなる
# if ($data->{param}) {
if (defined($data->{param})) {
print $data->{param};
} else {
print '$data->{param}' . " is nothing.\n";
}
$data->{param} = undef;
}
$data->{param} = "baz\n";
for (0..1) {
# 1 line な感じで書くとこうなる
# if ($_ = $data->{param}) {} else { $_ = '$data->{param}' . " is nothing.\n"; } print;
if (defined($_ = $data->{param})) {} else { $_ = '$data->{param}' . " is nothing.\n"; } print;
$data->{param} = undef;
}
$data->{param} = "bar\n";
for (0..1) {
# さらに, 存在しない時に出力しなくていいならば
# print if $_ = $data->{param};
print if defined($_ = $data->{param});
$data->{param} = undef;
}
EDIT:
$data->{param} = 0;
$data->{param} = '';
の時に, 挙動が想定してるのと違うことになるので修正しました.
上記の条件の時に, nothing の方に入りたい場合は, defined を外してあるコメントアウトのような書き方でOK.