2012-12-11 67 views
3

我想以動態的方式傳遞參數。我想使用Perl函數given(){},但出於某種原因,我不能在其他任何東西中使用它。這是我的。如何在別的東西里面使用given(){}?

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

現在我知道我可以在此之前聲明一個變量,使用它print()功能裏面,但我想是我的代碼清潔。同樣的原因,我不使用複合if-then-else陳述。如果它有幫助,這裏的錯誤

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. 

回答

8

你不能把語句放在表達式中。

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

雖然do可以幫助您實現。

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

但嚴重的是,你想要一個散列。

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

print($lookup{$parity}); 

甚至

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

+1正要提出同樣的事情。 – TLP

+1

噢,我的天哪,我想我在給定的聲明中賣掉了太多自己,並且由於某種原因想不到散列值......感謝您的回答! –

相關問題