Как я могу отличить аргумент, который не был передан, от аргумента, который был передан с ложным значением?

Я пытаюсь понять, как лучше различать в 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')";
  }
}
8
задан darch 3 July 2013 в 20:21
поделиться