是否有可能使用++
操作字符串插值里面?我已经尝试了以下情况:
my $i = 0;
foreach my $line (@lines) {
print "${i++}. $line\n";
}
但我得到Compile error: Can't modify constant item in postincrement (++)
您可以使用${\($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
更容易编写和阅读不使用此代码我建议。
裸字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
这个错误你提到的错误后,奇怪的来到。