perl - 将数值/范围的字符串转换为实际值

Sec*_*ear 2 perl numeric-ranges string-conversion

我想将表单的sting转换为1,2,25-27,4,8,14,7-10实际值的列表:1,2,4,7,8,9,10,14,25,26,27.

我搜索过,发现没有做这种扩展的事情.任何人都知道如何轻松地做到这一点?

Сух*_*й27 5

my $s = "1,2,25-27,4,8,14,7-10";
my %seen;
my @arr =
  sort { $a <=> $b }
  grep { !$seen{$_}++ }
  map { 
    my @r = split /-/; 
    @r>1 ? ($r[0] .. $r[1]) : @r;
  }
  split /,/, $s;

print "@arr\n";
Run Code Online (Sandbox Code Playgroud)

产量

1 2 4 7 8 9 10 14 25 26 27
Run Code Online (Sandbox Code Playgroud)

  • 这个perl很强大!这很优雅,正是我想要的.非常感谢你.虽然我不能自己编写,但我可以按照它正在做的事情. (2认同)