从Perl中的括号中获取键值对

时间:2009-09-21 21:26:44

标签: perl grep

如果我有一个由括号中的元组组成的字符串,并且我想从Perl中的元组中获取最大值,该怎么办?例如:

输入:[每天,32] [hoho,16] [toodledum,128] [echigo,4]

输出:128

2 个答案:

答案 0 :(得分:5)

如果您想要所有数据,可以先将其放入哈希值。

my %data = $str =~ /\[([^,]+),([^\]]+)\]/g;
use List::Util qw'max';
my($max) = max(values %data);
print "max: $max\n";

如果您想知道哪个密钥具有该号码,则可以使用grep

print "key: $_\n" for grep { $data{$_} == $max } keys %data;

如果你真的只需要最大值:

use List::Util qw'max';
print max $str =~ /\[[^,]+,([^\]]+)\]/g;

答案 1 :(得分:2)

对于提供的输入:

$input = "[everyday,32][hoho,16][toodledum,128][echigo:4]";
$max = -Inf;
foreach ($input =~ /\[\w+,(\d+)\]/g) {
  $max = $_ if $max < $_;
}
print $max;

如果值可能是浮点值,请使用([^\]]+)代替(\d+)