2010-07-11 27 views
9
%data = (
    'digits' => [1, 2, 3], 
    'letters' => ['a', 'b', 'c'] 
); 

我該如何才能push'4'轉成$data{'digits'}如何將元素推入保存爲散列值的數組引用?

我是新來的Perl。那些$,@,%符號看起來很奇怪,我來自PHP背景。

+1

見[的perldoc perldata](http://perldoc.perl.org/perldata.html)和[的perldoc perldsc](http://perldoc.perl.org/perldsc.html)有關perl的信息數據結構。 – Ether 2010-07-11 05:54:42

回答

13
push @{ $data{'digits'} }, 4; 

$ data {'digits'}返回數組引用。將@ {}放在它周圍以「解除引用」。以同樣的方式,%{}將取消引用散列引用,並引用標量引用。

如果你需要把東西放到一個散列引用,即

$hashref = { "foo" => "bar" } 

您可以使用:

${ $hashref }{ "foo2" } = "bar2" 

或箭頭符號:

$hashref->{"foo2"} = "bar2" 

在某些方面,請將參考文獻視爲與變量名稱相同的內容:

push @{ $arrayref }, 4 
push @{ "arrayname" }, 4 
push @arrayname , 4 

事實上,這就是「軟參考」。如果你沒有所有的嚴開啓,你可以從字面上:

# perl -de 0 
    DB<1> @a=(1,2,3) 
    DB<2> $name="a" 
    DB<3> push @{$name}, 4 
    DB<4> p @a 
1234 
+2

非硬引用是符號引用。 – ysth 2010-07-11 05:29:42

2
push @{data{'digits'}}, 4; 

的@ {}使得從引用的數組(data{'digits'}返回數組引用。)然後我們使用數組我們必須將值4推送到散列中的數組上。

這個link有助於解釋一點點。

我對這個link有任何關於Perl中哈希的問題。

1
push @{ $data{digits} }, 4; 

官方Perl文檔網站對數據結構的一個很好的教程:perldsc,特別是Hashes-of-Arrays部分。

$,@和%被稱爲sigils。

2

對於一個充滿異國情調但非常悅目的選擇,請查看autobox::Core CPAN模塊。

use autobox::Core; 

my %data = (
    digits => [1, 2, 3], 
    letters => ['a', 'b', 'c'], 
); 

$data{digits}->push(4); 

$data{digits}->say; # => 1 2 3 4 
相關問題