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

ewo*_*wok 0 perl increment string-interpolation

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

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

但我明白了 Compile error: Can't modify constant item in postincrement (++)

ike*_*ami 6

Bareword i相当于"i",所以你在做"i"++.

你要:

print($i++, ". $line\n");
Run Code Online (Sandbox Code Playgroud)

更简单:

print("$i. $line\n");
++$i;
Run Code Online (Sandbox Code Playgroud)

将值嵌入字符串的好方法是sprintf/ printf.

printf("%d. %s\n", $i++, $line);
Run Code Online (Sandbox Code Playgroud)

请注意,use strict不允许使用裸字,因此您也可以获得

Bareword "i" not allowed while "strict subs" in use
Run Code Online (Sandbox Code Playgroud)

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


dgw*_*dgw 5

您可以${\($var++)}在插入变量时使用它来递增变量。

use strict ;
use warnings ;

my $var = 5 ;

print "Before:     var=$var\n" ;
print "Incremented var=${\($var++)}\n" ;
print "After:      var=$var\n" ;
Run Code Online (Sandbox Code Playgroud)

这将打印

Before:     var=5
Incremented var=6
After:      var=6
Run Code Online (Sandbox Code Playgroud)

但我建议正如评论中提到的那样不要使用这段代码,因为使用printf更容易编写和阅读。

  • 但你为什么要这么做! (2认同)