perl的:字符串插值内递增变量

问题描述 投票:0回答:2

是否有可能使用++操作字符串插值里面?我已经尝试了以下情况:

my $i = 0;
foreach my $line (@lines) {
    print "${i++}. $line\n";
}

但我得到Compile error: Can't modify constant item in postincrement (++)

perl increment string-interpolation
2个回答
4
投票

您可以使用${\($var++)}递增变量,而插值它。

use strict ;
use warnings ;

my $var = 5 ;

print "Before:     var=$var\n" ;
print "Incremented var=${\($var++)}\n" ;
print "After:      var=$var\n" ;

这将打印

Before:     var=5
Incremented var=6
After:      var=6

但正如在评论中提到的,因为使用printf更容易编写和阅读不使用此代码我建议。


6
投票

裸字i相当于"i",所以你在做"i"++

你要:

print($i++, ". $line\n");

更简单:

print("$i. $line\n");
++$i;

嵌入值转换成字符串的好方法是sprintf / printf

printf("%d. %s\n", $i++, $line);

需要注意的是use strict不允许裸字,所以你也将获得

Bareword "i" not allowed while "strict subs" in use

这个错误你提到的错误后,奇怪的来到。

© www.soinside.com 2019 - 2024. All rights reserved.