エラーをエラーに。
先日、既存スクリプト読んでたら、
ひっかかった perl のワナについてメモ。
use strict も書いてるんだけど、エラーに扱って欲しい時も実行しちゃうんだよね。
どうすりゃ完璧にエラーに出来たんだかなぁ…。
#!/usr/bin/perl -w結果、これは前者「Your age is zero.」になっちゃう。use strict;
use warnings;
my %hash = undef;
if ($hash{'age'} == '0') {
print "Your age is zero.\n";
} else {
print "Your age isn't zero.\n";
}
exit;
「if ($hash{'age'} == '0') {」を「if ($hash{'age'} == 0) {」にしても同じ結果。
Odd number of elements in hash assignment at ./testHash.pl line 6.Use of uninitialized value in list assignment at ./testHash.pl line 6.
Use of uninitialized value in numeric eq (==) at ./testHash.pl line 8.
Your age is zero.
勿論、「defined $hash{'age'} and $hash{'age'} == 0」にすりゃいいんだけど
それ以前に、こういうミスは誰だってやっちゃうと思うので
そもそも実行されちゃう事、自体が問題かと思ったり。
そこで、どう実行させないようにしたらいいのか考えてみるのだけど。
かと言って、warning レベルでストップさせちゃうと…
#!/usr/bin/perl -w全ての warning が起きた時点で、実行中止されちゃうし。use strict;
use warnings;
BEGIN {
$SIG{__WARN__} = sub { die(@_) }
}
my %hash = undef;
if ($hash{'age'} == 0) {
print "Your age is zero.\n";
} else {
print "Your age isn't zero.\n";
}
exit;
って、そりゃ一切 warning の出ないスクリプトがいいんですけどね…。