如何在 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
}