2012-07-17 78 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