2

Tie::IxHash 生成一个对象,该对象具有一组几乎完整的行为,既是数组又是哈希。但我没有找到each函数的等价物,它返回 (key,value) 对。

我只是忽略了它吗?

如果我必须自己动手,我会认为这样的事情会起作用:

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使用绑定哈希来实现?

4

1 回答 1

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($_));
    ...
}
于 2013-02-15T01:17:49.880 回答