0

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

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

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

(我在一个步骤中分配键和在另一个步骤中分配值的原因是这是 API 的一部分,用户可能希望使用 (key, value) 接口添加值。)

我试过了$ixh->Values(0..2) = qw/1 2 3/;了,但这种方法不喜欢在左边。

当然,我可以使用$ixh->Replace(index, value)编写一个循环,但我想知道是否有我忽略的“批量”方法。

4

2 回答 2

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::, ...;
于 2013-06-10T00:04:33.407 回答
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
于 2013-06-10T00:49:50.350 回答