Я пытаюсь понять, как лучше различать в Perl случаи, когда аргумент не был передан, и когда аргумент был передан как 0, поскольку для меня они означают разные вещи.
(Обычно мне нравится двусмысленность, но в данном случае я генерирую 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')";
}
}