2012-07-17 79 views
2

請看下面的代碼示例。Perl,如何使用「打印」打印評估數字總和

$ct=5; 
print "hey $ct+1"; 

評估後,將返回:

hey 5+1 

不過,我試圖讓代碼返回:

hey 6 

有誰知道是否有某種評價打電話給我可以讓這種情況正確發生,或者改變語法的方式嗎?我知道我可以簡單地做到這一點:

$dum=$ct+1; 
print "hey $dum"; 

但是我告訴你的是一個簡單的更復雜的東西。如果我能得到這個小例子正確工作,我的大問題就解決了。謝謝。

回答

8

你想執行一個Perl加法運算,但代碼只設有一個Perl的字符串文字。你想

print "hey ", $ct+1; 

如果你確實有一個變量Perl的源代碼,你要執行它,你必須調用Perl的解析器和編譯器:eval EXPR

+0

這假定'$,價值'是民主基金或空字符串。 – chepner 2012-07-17 18:38:20

+0

@chep這是默認值。你想說啥? – TLP 2012-07-17 19:11:22

+0

我的觀點是表明'$,'有可能具有不同的值,在這種情況下,這個答案不等於'$ dum = $ ct + 1;打印「嘿,$ dum」'。就這樣。 – chepner 2012-07-17 19:14:22

8

另一種替代方法被格式化打印。

my $ct = 5; 
printf "hey %s", $ct+1; 
+0

嗡嗡聲,'%d'暗示一個沒有被請求並且不是必需的'int'。我會簡單地使用'%s'。這不是C. – ikegami 2012-07-17 20:00:52

+0

我只是假設小數,但是是的,你是正確的,%s將是一個全面的迴應。我會更新它。 – squiguy 2012-07-17 20:02:02

2

這是一種中級Perl的,但你可以把你的表現爲基​​準,並取消對它的引用雙引號中:

print "hey @{[$ct+1]}"; 
print "hey ${\($ct+1)}"; 

這樣的代碼是難讀,並給出Perl的聲譽是不友好的新手,所以我不建議這樣做了提取出表達式的報價:

print "hey ", ($ct+1); 
print "hey " . ($ct+1); 
+0

我想說ref-deref對看起來很糟糕...如果我沒有經常使用它。 :) – chepner 2012-07-17 18:32:34