perl:在字符串插值中增加变量

perl: increment variable inside string interpolation

是否可以在字符串插值中使用 ++ 运算符?我尝试了以下操作:

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

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

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

奇怪的是,该错误出现在您提到的错误之后。

您可以使用 ${\($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 更易于编写和阅读。