Arrays 如何获取数组元素';在perl中,通过给定的键指定的值

Arrays 如何获取数组元素';在perl中,通过给定的键指定的值,arrays,perl,Arrays,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}; 打印%array; 或 打印%array{b.b.b.b}; 它显示错误,那

我对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};
打印%array;
或
打印%array{b.b.b.b};
它显示错误,那么我如何才能得到它? 代码测试链接:

使用:

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"};
使用:


关联数组在Perl中被调用

始终使用
严格使用;使用警告
#!/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'};

关联数组在Perl中被调用

始终使用
严格使用;使用警告
#!/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'};
使用

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

使用

你所写的几乎都是正确的,唯一的错误是没有引用密钥。这仅在本例中是必要的,因为
.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而不是Perl5,所以我想我会提到它以供参考,以防您遵循Perl6教程并尝试使用
Perl
编译代码,您编写的代码在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而不是Perl5,所以我想我会提到它以供参考,以防您遵循Perl6教程并尝试使用
Perl

编译代码。我的数组中是否有任何问题?您没有使用Perl语法。此外,不要说“it shows error”,而是应该显示错误,以便我们知道它是什么。错误列表:1)在分配给散列或数组时,必须将列表括在括号中,2)必须(在本例中)引用键,因为
是运算符,3)
print say
执行相同的操作两次。它还将打印一个
1
(来自
的返回值,比如说
),4)角括号
用于全局或文件句柄,从不用于散列。@TLP我认为OP是按16次写入的(见我的答案),在这种情况下,它只有一个错误。如果不是,那么语法是错误的,但是如果这些是遵循Perl6规则的随机错误,我会感到惊讶。我的数组中有问题吗?您没有使用Perl语法。此外,不要说“it shows error”,而是应该显示错误,以便我们知道它是什么。错误列表:1)在分配给散列或数组时,必须将列表括在括号中,2)必须(在本例中)引用键,因为
是运算符,3)
print say
执行相同的操作两次。它还将打印一个
1
(来自
的返回值,比如说
),4)角括号
用于全局或文件句柄,从不用于散列。@TLP我认为OP是按16次写入的(见我的答案),在这种情况下,它只有一个错误。如果不是,那么语法是错误的,但如果这些是遵循Perl6规则的随机错误,我会感到惊讶。@fatih已经改变了我的语法answer@fatih我已经改变了回答,不客气。您可能需要阅读。除非使用strict/warnings,否则无需引用键。最佳做法是
使用strict/warnings
。你应该阅读你的答案,基本上是说“做X,然后修复Y”,除了做X导致的Y。所有实际问题(散列声明、散列访问、打印/说)都没有解释,好像它们是偶然的。@robarl如果你在这种情况下不引用键,它将被视为一个表达式而不是一个字符串,这意味着
a.a.a.a
将变成
aaaa
(4
a
连接),并且您将得到一个空字警告。严格的警告不会导致问题,它们只会告诉你问题的存在。欢迎你。您可能需要阅读。除非使用strict/warnings,否则无需引用键。最佳做法是
使用strict/warnings
。你应该阅读你的答案,基本上是说“做X,然后修复Y”,除了做X导致的Y。所有实际问题(散列声明、散列访问、打印/说)都没有解释,好像它们是偶然的。@robarl如果你在这种情况下不引用键,它将被视为一个表达式而不是一个字符串,这意味着
a.a.a.a
将变成
aaaa
(4
a
连接),并且您将得到一个空字警告。严格的警告不会导致问题,它们只会告诉你问题的存在。