是否可以在字符串插值中使用++
运算符?我尝试过以下方法:
my $i = 0;
foreach my $line (@lines) {
print "${i++}. $line\n";
}
但我得到Compile error: Can't modify constant item in postincrement (++)
答案 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
更容易编写和阅读。