2012-12-11 4 views
3

J'essaie de transmettre des paramètres de manière dynamique. Je voudrais utiliser la fonction Perl given(){}, mais pour une raison quelconque, je ne peux pas l'utiliser à l'intérieur de quelque chose d'autre. Voici ce que j'ai.Comment utiliser given() {} dans quelque chose d'autre?

print(given ($parity) { 
    when (/^None$/) {'N'} 
    when (/^Even$/) {'E'} 
    when (/^Odd$/) {'O'} 
}); 

Maintenant, je sais que je peux déclarer une variable avant cela et l'utiliser à l'intérieur de la fonction print(), mais je suis en train d'être plus propre avec mon code. La même raison que je n'utilise pas les instructions composées if-then-else. Si cela aide, voici l'erreur

syntax error at C:\Documents and Settings\ericfoss\My Documents\Slick\Perl\tests\New_test.pl line 22, near "print(given" 
Execution of C:\Documents and Settings\ericfoss\My Documents\Slick\Perl\tests\New_test.pl aborted due to compilation errors. 

Répondre

8

Vous ne pouvez pas mettre d'instructions à l'intérieur des expressions.

print(foreach (@a) { ... }); # Fail 
print(given (...) { ... }); # Fail 
print($a=1; $b=2;);   # Fail 

Bien que do peut vous aider à atteindre cet objectif.

print(do { foreach (@a) { ... } }); # ok, though nonsense 
print(do { given (...) { ... } }); # ok 
print(do { $a=1; $b=2; });   # ok 

Mais sérieusement, vous voulez un hachage.

my %lookup = (
    None => 'N', 
    Even => 'E', 
    Odd => 'O', 
); 

print($lookup{$parity}); 

Ou encore

print(substr($parity, 0, 1)); 
+2

+1 était sur le point de proposer la même chose. – TLP

+1

Oh mon dieu, je pense que je me suis vendu trop sur la déclaration donnée et je ne pouvais pas penser à faire un hachage pour une raison quelconque ... Merci pour la réponse! –

Questions connexes