2017-10-12 4 views
1

Puis-je définir une variable uniquement si un paramètre est faux?
J'ai quelque chose comme:Initialisation conditionnelle/définition de la variable

my $object = Class::create($args); 
for my $i (@input) { 
    if ($test) { 
    # print some info here  
    next; 
    } 

#use of $object here  
} 

Si je fais quelque chose comme:

my $object = Class::create($args) unless ($test); 

est qu'une approche correcte pour l'initialisation?

+0

'my $ object =! $ Test && Classe :: create ($ args);' –

+0

@ Сухой27: Pour être honnête, il est très difficile de comprendre exactement ce qui se passe (au moins pour moi) – Jim

+1

@Jim && '(and' and') en court-circuit Perl _et renvoyer la valeur_ (pas vrai/faux). Donc, si '! $ Test' renvoie une valeur falsey (le critère de votre code) alors le reste de l'instruction n'est pas évalué et le retour de'! $ Test' est assigné à '$ object' (vraisemblablement' undef', emtpy string, etc - dépend de la façon dont votre '$ test' est conçu). Si, cependant, '! $ Test' renvoie une valeur de vérité _then_ le reste va. Cela implémente les 6 lignes de votre exemple, correctement. Notez que la réponse de mob a l'avantage de définir '$ object' spécifiquement à' undef' (et ne pas compter sur le retour de '! $ Test'). – zdim

Répondre

5

Cette syntaxe est ... fraught with peril.

my $object = $test ? undef : Class::create($args); 

my $object; 
$object = Class::create($args) unless $test; 

sont des alternatives plus sûres.