Perl Tie :: IxHash - 使用值列表更新值

时间:2013-06-09 23:50:07

标签: perl hash indexed tie

我有一个Tie :: IxHash对象,已经初始化如下:

my $ixh = Tie::IxHash->new('a' => undef, 'b' => undef, 'c' => undef);

以后我想为这三个键分配值qw/1 2 3/的列表。我似乎无法在一个声明中找到一种方法。

(我在一步中分配键,而在另一步中分配值的原因是,这是API的一部分,而用户可能希望使用(键,值)接口添加值。)< / p>

我尝试$ixh->Values(0..2) = qw/1 2 3/;,但该方法不喜欢在左侧。

当然,我可以使用 $ ixh-&gt;替换(索引,值)来编写循环,但我想知道是否存在我忽略的“批量”方法。

2 个答案:

答案 0 :(得分:3)

tie my %ixh, Tie::IxHash::, ('a' => undef, 'b' => undef, 'c' => undef);
@ixh{qw( a b c )} = (1, 2, 3);

但它并不是真正的大宗商店;它将导致三次调用STORE


要访问Tie :: IxHash特定功能(ReplaceReorder),您可以使用tied获取基础对象。

tied(%ixh)->Reorder(...)

基础对象也由tie返回。

my $ixh = tie my %ixh, Tie::IxHash::, ...;

答案 1 :(得分:1)

Does this mean I couldn't use the "more powerful features" of the OO interface?

use strict;
use warnings;
use Tie::IxHash;

my $ixh = tie my %hash, 'Tie::IxHash', (a => undef, b => undef, c => undef);

@hash{qw(a b c)} = (1, 2, 3);

for ( 0..$ixh->Length-1 ) {
  my ($k, $v) = ($ixh->Keys($_), $ixh->Values($_));
  print "$k => $v\n";
}

__OUTPUT__
a => 1
b => 2
c => 3