我有一个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;替换(索引,值)来编写循环,但我想知道是否存在我忽略的“批量”方法。
答案 0 :(得分:3)
tie my %ixh, Tie::IxHash::, ('a' => undef, 'b' => undef, 'c' => undef);
@ixh{qw( a b c )} = (1, 2, 3);
但它并不是真正的大宗商店;它将导致三次调用STORE
。
要访问Tie :: IxHash特定功能(Replace
和Reorder
),您可以使用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