这个简短的计划有什么问题?

时间:2012-02-15 21:17:16

标签: perl

我写这个小程序。它已编译,但它没有按预期打印数组大小。我的计划出了什么问题?

#!/usr/bin/perl -w

use strict; 
use warnings; 
my $primaryFeatures 
= { foo => [ 'fool', 'food', 'foot' ], 
    bar => ['barricade'], 
  }; 
 my $arraysize = $#{$primaryFeatures->{"foo"}}+1;
 print $arraysize;

2 个答案:

答案 0 :(得分:3)

您正在使用数组引用作为哈希值(正如您所希望的那样),因此您需要取消引用数组引用。

此外,如果在标量上下文中使用数组,则返回数组的大小。一般来说,您可能更倾向于使用$#构造。

#!/usr/bin/perl -w

use strict; 
use warnings; 
my $primaryFeatures = {
    foo => [ 'fool', 'food', 'foot' ], 
    bar => ['barricade'], 
}; 
my $arraysize = @{$primaryFeatures->{foo}};
print $arraysize;

答案 1 :(得分:2)

您的计划没有任何问题。

$ cat x.pl
use strict; 
use warnings; 
my $primaryFeatures 
= { foo => [ 'fool', 'food', 'foot' ], 
    bar => ['barricade'], 
  }; 
 my $arraysize = $#{$primaryFeatures->{"foo"}}+1;
 print $arraysize, "\n";

$ perl x.pl
3

(我在输出中添加了换行符,但这与问题无关。)

我确实找到了以下清洁工:

 my $arraysize = @{ $primaryFeatures->{foo} };