1

我可以操作单个数组元素并将对该数组的引用添加为哈希中的值。简单的。例如,这达到了预期的结果:

# split the line into an array
my @array = split;

# convert the second element from hex to dec
$array[1] = hex($array[1]);

# now add the array to a hash
$hash{$name}{ ++$count{$name} } = \@array;

我的问题:是否可以使用匿名数组做同样的事情?我可以通过执行以下操作来接近:

$hash{$name}{ ++$count{$name} } = [ split ];

但是,这不会操纵匿名数组的第二个索引(将十六进制转换为十进制)。如果可以,怎么做?

4

1 回答 1

4

你要的是这个

my $array = [ split ];

$array->[1] = hex($array->[1]);

$hash{$name}{ ++$count{$name} } = $array;

但这可能不是你的意思。

另外,与其使用顺序编号的散列键,不如使用数组散列,像这样

my $array = [ split ];

$array->[1] = hex($array->[1]);

push @{ $hash{$name} }, $array;

您需要一种访问数组的方法来说出您想要修改的内容,但是您可以在将其推送到散列后对其进行修改,如下所示:

push @{ $hash{$name} }, [split];
$hash{$name}[-1][1] = hex($hash{$name}[-1][1]);

虽然那真的不是很好。或者你可以

push @{ $hash{$name} }, do {
    my @array = [split];
    $array[1] = hex($array[1]);
    \@array;
};

甚至

for ([split]) {
    $_->[1] = hex($_->[1]);
    push @{ $hash{$name} }, $_;
}
于 2013-04-05T00:55:01.567 回答