2011-05-13 54 views
3

我對Perl中列表和標量上下文的一些細節有些困惑,我希望有人能夠幫助我一點。我的最終目標是比較兩個數組中的元素數,除非其中一個數組是一個匿名數組,並且我無法弄清楚讓Perl告訴我它有多少個元素。這是我鍵入到調試器:`如何在Perl中強制列表或標量上下文?

DB<10> @a = ([1,2,3,4],[5,6,7,8,9],[10,11]) 

DB<11> @b = $a[1] 

DB<12> $c = @b 

DB<13> p $c 
1    # Why didn't this print out 5? 

DB<14> $d = $a[1] 

DB<15> p @$d 
56789 

DB<16> p $$d 
Not a SCALAR reference at (eval 17)[/opt/local/lib/perl5/5.8.9/perl5db.pl:638] line 2. 

DB<17> @e = @a[1] 

DB<18> p @e 
ARRAY(0x87c358) 

DB<19> p ${@e} 

我走了奇怪的字符組合的嘗試,有人可以告訴我,我做錯了嗎?謝謝。

+1

見http://perlmonks.org/?node=References+quick+reference – ysth 2011-05-13 16:25:06

回答

11

[]將創建一個數組引用(這是一個標量)。

$a[1][5,6,7,8,9](數組引用)

@b = $a[1]將創建在它一個項目(數組引用)的新數組。

您需要取消引用arrayref。

@b = @{$a[1]}

此時,你可以得到物品的數量吧:

print scalar @b

+6

或只是'print print @@ $ $ [1]}' – ysth 2011-05-13 16:26:48

+0

閱讀'perldoc perlreftut'(perldoc.perl.org/perlreftut.html)或者數據結構烹飪書perldoc perldsc'(perldoc.perl.org/perldsc.html) – 2011-05-13 17:24:34