学生のプログラミング課題を修正するためのストレス システムを Perl で構築しています。check(<boolean>,<congrats-message>,<blame-message>)
途中で役立つはずの関数を作成しました。
として呼び出すと
check(get_option('content-type') eq "text/html","good type", "bad type");
すべて順調。でも、あえてやるなら
check(get_option('content-type') =~ m:text/html:i, "good type", "bad type");
正規表現が一致しないと壊れます。実際には a と同等check("good type", "bad type")
です。$_[0]
私は check() 関数で$_[1]
などのみを使用していますが、最初の引数として 'undef' を持っていたわけではありません: でバグを実際にキャッチできますdie unless $#_ == 2
。
何が起こっていますか ?私はそれを回避しました
check((get_option('content-type') =~ m:text/html:i && 1), "good type", "bad type");
しかし、この奇妙な状況の原因と理由を理解したいと思っています。
--
sub check {
if ($_[0]) {
$okay++;
print STDERR "^_^ $_[1] ($okay)\n";
} else {
print STDERR ">_< $_[2]\n";
}
return $_[0];
}