2010-09-22 4 views
2

Meilleur demandé par un exemple:Comment puis-je vérifier si une valeur est indéfinie en Perl?

my $var1=1; 
my $var2; 
my $var3=3; 

# say "at least one undef" if at least one of $var1, $var2, $var3 is undef 

Il est évident que je peux boucle explicitement et le faire, mais j'aime toujours trouver un liners qui permettent d'atteindre le même résultat.

+0

double possible de [Comment puis-je vérifier si un Perl la variable scalaire a été initialisée?] (http://stackoverflow.com/questions/3738836/how-do-i-check-if-a-perl-scalar-variable-has-been-initialized) –

Répondre

10
if (grep { !defined } $var1, $var2, $var3) { 
    say 'at least one undef' 
} 

une doublure

say 'at least one undef' if grep { !defined } $var1, $var2, $var3; 
+0

Qu'en est-il de cool? // 'opérateur? N'est-il pas utile ici? –

+0

'//' est un opérateur de court-circuit, il serait donc utile si vous aviez un chemin de code que vous voulez exécuter conditionnellement en fonction de la définition d'une seule valeur. Je ne peux pas penser à une utilisation ici, mais TMTOWTDI. – Bob

+0

@David B, '//' est défini-ou, il ne peut donc être utilisé que pour calculer "au moins un défini". Pour obtenir "au moins un undef", vous auriez besoin d'un opérateur défini-et qui n'existe pas (actuellement). – cjm

1

expansion sur la réponse de Bob, dans certains cas, vous pouvez saisir le nombre réel

say 'has ', scalar (grep { not defined } $var1,$var2,$var3),' undef'; 
Questions connexes