Tie :: IxHash生成一个对象,该对象具有大部分完整的行为集作为数组和散列。但是我找不到等价的each
函数,它返回(键,值)对。
我只是忽略了它吗?
如果我必须自己动手,我会认为这样的事情会起作用:
use Tie::IxHash;
$t = Tie::IxHash->new( a,1,b,2,c,3 );
while (($x1, $x2) = map { $_ => $t->Values($_) } $t->Keys ) { say "$x1 => $x2"; }
但输出是一系列无限的
a => 1
......原因尚不清楚。
任何人都可以建议如何使用绑定哈希来实现each
?
答案 0 :(得分:6)
Tie::IxHash
没有Each
方法,但您可以在绑定哈希上使用Perl的each
函数:
use Tie::IxHash;
my $t = tie my %hash, 'Tie::IxHash';
@hash{qw/a b c d e/} = (1, 2, 3, 4, 5);
# using the tied hash
while (my ($key, $val) = each %hash) {
print "$key => $val\n";
}
# using the OO interface (interchangeably)
foreach my $key ($t->Keys) {
my $val = $t->FETCH($key);
print "$key => $val\n";
}
请注意,$t->Values($key)
无效。此方法期望索引不是键。这将有效:
foreach (0 .. $t->Length - 1) {
my ($key, $val) = ($t->Keys($_), $t->Values($_));
...
}