假设我有一个 hashref,其 Data::Dumper
输出如下所示:
$VAR1 = { foo_0 => 'foo_zero', foo_1 => 'foo_one', bar_0 => 'bar_zero', bar_1 => 'bar_one' }
我想根据其键将这个哈希分成两个,如下所示,但我不知道如何执行此操作:
$VAR1 = { foo_0 => 'foo_zero', foo_1 => 'foo_one' }, $VAR2 = { bar_0 => 'bar_zero', bar_1 => 'bar_one' }
第一个哈希的键匹配 /foo_[\d]/
,而第二个哈希的键匹配 /bar_[\d]/
。
如果您能告诉我如何执行此操作(或提示我一些搜索关键字),我将不胜感激。
问候,
克里斯托弗·史密斯
最佳答案
到目前为止发布的其他解决方案可以工作,但是快速且肮脏。当输入模式改变时它们需要改变,并且假设只有两种模式。这个通用解决方案不会受到这个问题的影响:它不需要改变,并且需要任意数量的模式。
sub classify_hashref {
my ($href, %p) = @_;
my $r;
for my $hkey (keys %{ $href }) {
for my $pkey (keys %p) {
$r->{$pkey}{$hkey} = $href->{$hkey}
if $hkey =~ $p{$pkey};
}
}
return $r;
}
my $h = {
foo_0 => 'foo_zero',
foo_1 => 'foo_one',
bar_0 => 'bar_zero',
bar_1 => 'bar_one'
};
classify_hashref($h, foo_like => qr/^foo_/, looks_like_bar => qr/^bar_/);
# {
# looks_like_bar => {
# bar_0 => 'bar_zero',
# bar_1 => 'bar_one'
# },
# foo_like => {
# foo_0 => 'foo_zero',
# foo_1 => 'foo_one'
# }
# }
关于regex - Perl:根据键将散列分成几个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645350/