2015-09-04 46 views
1

我在Perl中是全新的。我想通过关联数组中的键获取元素的值。 我的数组是:如何通过perl中给定的键获取数组元素的值

my %array = a.a.a.a => "my name", 
     b.b.b.b => "my home", 
     c.c.c.c => "my city"; 

当我打印

print say %array<b.b.b.b>; 
or 
print say %array{b.b.b.b}; 

它显示的错误,所以我怎么能得到这个? 代码的测试链接:codepad link

+0

在我的数组中有没有问题? – fatih

+3

您没有使用Perl语法。此外,不要说“它显示错误”,你应该*显示错误*,所以我们知道它是什么。 – TLP

+2

错误列表:1)当分配给一个散列或数组时,你必须将列表括在括号中,2)你必须(在这种情况下)引用键,因为'.'是一个运算符,3)'print say'正在做同样的事情两次。它还将打印1(来自'say'的返回值),4)角度大括号'<>'用于全局或文件句柄,从不用于散列。 – TLP

回答

2

副阵列称为在Perl Hash

总是在您的Perl代码中使用use strict; use warnings;。如果你使用它,你会知道你的散列中的键没有被引用。

#!/usr/bin/perl 
use strict; 
use warnings; 

my %hash = (
     'a.a.a.a' => "my name", 
     'b.b.b.b' => "my home", 
     'c.c.c.c' => "my city" 
    ); 

要你做$hash{$key}一个关键的访问值,所以b.b.b.b

print $hash{'b.b.b.b'}; 

Demo

+0

非常感谢,它的作品:);大! – fatih

+0

不客气。你可能想阅读[Gabor的哈希文章](http://perlmaven.com/perl-hashes)。 –

+0

除非使用严格/警告,否则不需要引用键*。 – RobEarl

1

使用:

my %array = ("a.a.a.a" => "my name", 
     "b.b.b.b" => "my home", 
     "c.c.c.c" => "my city"); 

print $array{"b.b.b.b"}; 
+0

@fatih已经改变了我的回答 – Jens

+0

是的这个作品,非常感谢:) – fatih

0

使用

print say $array{"b.b.b.b"}; 

访问
1

你写的是差不多有效的Perl6,唯一的错误是没有引用关键字。这只是在这个例子中,因为.a.b看起来像在Perl6中的方法调用,并会产生未声明的子程序警告。

my %array = 
    'a.a.a.a' => "my name", 
    'b.b.b.b' => "my home", 
    'c.c.c.c' => "my city"; 

say %array<b.b.b.b>; 
say %array{'b.b.b.b'}; 

运行这给了你所期望的:

$ perl6 hash.pl6 
my home 
my home 

这个例子的代码看起来更像是Perl6比Perl 5给我,所以我想我会在情况下提这个参考你下一个Perl6教程,并试图用perl编译代码。

相关问题