perl:字符串插值中的增量变量

时间:2017-07-24 16:44:07

标签: perl increment string-interpolation

是否可以在字符串插值中使用++运算符?我尝试过以下方法:

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

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

2 个答案:

答案 0 :(得分:6)

Bareword 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

在您提到的错误之后,这个错误很奇怪。

答案 1 :(得分: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更容易编写和阅读。