私は、引数が渡されていない場合と、引数が0として渡されている場合を、Perlで区別するための最良の方法を見つけようとしています。なぜなら、それらは私にとって異なることを意味するからです。
(通常、あいまいさが好きですが、この場合はSQLを生成しているので、未定義の引数をNULLに置き換えたいのですが、0は0のままにしておきます。)
したがって、これはあいまいさです。
sub mysub {
my $arg1 = shift;
if ($arg1){
print "arg1 could have been 0 or it could have not been passed.";
}
}
そしてこれまでのところ、これが私の最善の解決策です...しかし、それは少し醜いと思います。あなたがよりクリーンな方法を考えることができるかどうか、またはこれがあなたにとって大丈夫に見えるかどうか疑問に思っています:
sub mysub {
my $arg1 = (defined shift) || "NULL";
if ($arg1 ne "NULL"){
print "arg1 came in as a defined value.";
}
else {
print "arg1 came in as an undefined value (or we were passed the string 'NULL')";
}
}