如何在 foreach 循环中使用“_”下划线来构建范围
How to use "_" underscore in foreach loop to build range
我有一个散列,其中包含“Bonus”、“Plusbonus”、“Plusbonus_001”、“Plusbonus_001”、...
等索引
现在我正在寻找循环处理这些键的可能性。 (但是,还有很多没处理好!)
我试过了
use strict;
use warnings;
for ("Bonus", "Plusbonus", "Plusbonus_001" .. "Plusbonus_010") {
# do some stuff
}
但我收到错误 Argument "Plusbonus_001" isn't numeric in range (or flop) at ./test.pl line 14.
没有 _
/下划线它工作得很好。
我用过
use strict;
use warnings;
for ("", "001" .. "010") {
my $index = "Plusbonus" . ($_ ? "_$_" : "");
# do some stuff by using $index instead of $_ as key
}
但是现在,有了“Bonus”,还有另一个关键要处理,这样我的解决方法就不再有效了。
是否有可能通过另一条捷径生成这些密钥?
您可以使用map建立一个范围:
use warnings;
use strict;
for (map { sprintf 'Plusbonus_%03d', $_ } 0 .. 10) {
print "$_\n";
}
打印:
Plusbonus_000
Plusbonus_001
Plusbonus_002
Plusbonus_003
Plusbonus_004
Plusbonus_005
Plusbonus_006
Plusbonus_007
Plusbonus_008
Plusbonus_009
Plusbonus_010
本着尝试使用魔术字符串增量的精神,您可以使用以下内容。它很短但不容易阅读。
use strict;
use warnings;
for ("Bonus", "Plusbonus", map { "Plusbonus_" . $_ } "001" .. "010") {
# do something
}
我有一个散列,其中包含“Bonus”、“Plusbonus”、“Plusbonus_001”、“Plusbonus_001”、...
等索引现在我正在寻找循环处理这些键的可能性。 (但是,还有很多没处理好!)
我试过了
use strict;
use warnings;
for ("Bonus", "Plusbonus", "Plusbonus_001" .. "Plusbonus_010") {
# do some stuff
}
但我收到错误 Argument "Plusbonus_001" isn't numeric in range (or flop) at ./test.pl line 14.
没有 _
/下划线它工作得很好。
我用过
use strict;
use warnings;
for ("", "001" .. "010") {
my $index = "Plusbonus" . ($_ ? "_$_" : "");
# do some stuff by using $index instead of $_ as key
}
但是现在,有了“Bonus”,还有另一个关键要处理,这样我的解决方法就不再有效了。
是否有可能通过另一条捷径生成这些密钥?
您可以使用map建立一个范围:
use warnings;
use strict;
for (map { sprintf 'Plusbonus_%03d', $_ } 0 .. 10) {
print "$_\n";
}
打印:
Plusbonus_000
Plusbonus_001
Plusbonus_002
Plusbonus_003
Plusbonus_004
Plusbonus_005
Plusbonus_006
Plusbonus_007
Plusbonus_008
Plusbonus_009
Plusbonus_010
本着尝试使用魔术字符串增量的精神,您可以使用以下内容。它很短但不容易阅读。
use strict;
use warnings;
for ("Bonus", "Plusbonus", map { "Plusbonus_" . $_ } "001" .. "010") {
# do something
}