2013-04-05 54 views
1

我可以操作單個數組元素,並將該數組的引用添加爲散列中的值。簡單。例如,這達到了預期的效果:Perl - 轉換匿名數組

# 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

你所要求的是這個

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} }, $_; 
} 
+0

感謝信鮑羅廷。我想我的問題是 - '$ array'也可以匿名嗎?我現在可以看到它不可能。我也會執行你的建議。乾杯。 – Steve 2013-04-05 01:20:57

+0

$ array是對匿名數組的引用;這有幫助嗎?你可以做$ hash {$ name} {++ $ count {$ name}} = map [$ _-> [0],hex($ _-> [1]),@ $ _ [2。 。$#$ _]],[split];'但是這將是愚蠢的 – ysth 2013-04-05 02:46:12

+1

這是這個主題的另一種變化:'$ hash {$ name} {++ $ count {$ name}} =(map {$ _ - > [1] = hex($ _-> [1]); $ _}([split]))[0];' – imran 2013-04-05 02:49:32