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
更易于编写和阅读。
是否可以在字符串插值中使用 ++
运算符?我尝试了以下操作:
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
更易于编写和阅读。