2011-05-04 74 views
12

這裏是我面臨的形勢......如何確定數組引用中元素的數量?

$perl_scalar = decode_json(encode ('utf8',$line)); 

decode_json返回引用。我相信這是一個數組。我如何找到$ perl_scalar的大小?根據Perl文檔,數組是使用@name引用的。有沒有解決方法?這個引用由散列數組組成。我想得到一些哈希值。

如果我做長度($ perl_scalar),我得到一個數字,它不匹配數組中的元素數量。

回答

25

這將是:

scalar(@{$perl_scalar}); 

您可以從perlreftut獲得更多的信息。

您可以參考陣列複製到一個正常的是這樣的:

my @array = @{$perl_scalar}; 

但在此之前,你應該檢查$perl_scalar是否真的引用一個數組,ref

if (ref($perl_scalar) eq "ARRAY") { 
    my @array = @{$perl_scalar}; 
    # ... 
} 

更新

length方法不能用於計算數組的長度,它用於獲取字符串的長度。

2

你可以看到整個結構與數據::自卸車:

use Data::Dumper; 
print Dumper $perl_scalar; 

數據::翻車機是安裝在Perl的標準模塊。有關所有標準語用和模塊的完整列表,請參閱perldoc perlmodlib

1
$num_of_hashes = @{$perl_scalar}; 

由於您將分配給標量,因此解除引用的數組將在標量上下文中評估爲元素數量。

如果您需要強制標量上下文,請按照KARASZI的說法使用scalar函數。

3

您也可以使用數組的最後一個索引來計算數組中的元素數。

my $length = $#{$perl_scalar} + 1; 
相關問題