我有一个Tie::IxHash对象,已初始化如下:
my $ixh = Tie::IxHash->new('a' => undef, 'b' => undef, 'c' => undef);
,然后我想给这三个键赋一个值列表qw/1 2 3/
。我似乎找不到一种方法在一个声明中做到这一点。
(我在一步中分配键,在另一步中分配值的原因是,这是API的一部分,而用户可能希望使用(键,值)接口添加值。)
我尝试了$ixh->Values(0..2) = qw/1 2 3/;
,但该方法不喜欢在左侧。
当然,我可以使用$ixh->Replace(index, value)来编写一个循环,但是我想知道是否有一个我忽略的"bulk"方法。
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::, ...;
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 => $vn";
}
__OUTPUT__
a => 1
b => 2
c => 3