可以在perl中向记录添加数组吗?

可以在perl中向记录添加数组吗?,perl,Perl,我向记录中添加了一个数组,但访问数组元素时遇到问题。这是我的密码 # Create and initialize an array @array = (1, 2, 3); # Add it to a record $rec = { field1 => 'foo', field2 => @array }; 我试图打印数组的内容,但它不起作用 print $rec->{field2}[0] . "\n"; 我的问题是…向记录中添加数组,然后访问数组元素

我向记录中添加了一个数组,但访问数组元素时遇到问题。这是我的密码

# Create and initialize an array    
@array = (1, 2, 3);

# Add it to a record
$rec = {
    field1 => 'foo',
    field2 => @array
};
我试图打印数组的内容,但它不起作用

print $rec->{field2}[0] . "\n";

我的问题是…向记录中添加数组,然后访问数组元素的正确方法是什么?

您必须引用数组

$rec = {
    field1 => 'foo',
    field2 => \@array
};
否则数组将被展平到列表中

$rec = {
    field1 => 'foo',
    field2 => 1,
    2, 3
};

您可能还需要检查

您必须引用数组

$rec = {
    field1 => 'foo',
    field2 => \@array
};
否则数组将被展平到列表中

$rec = {
    field1 => 'foo',
    field2 => 1,
    2, 3
};

您可能还希望选中

您可以访问hashrefs内部的arraysrefs,如下所示:

$rec->{field2}->[$i] 
其中$i是要访问的元素的索引

你好,蒂姆

编辑:添加了完整的工作示例

#!/usr/bin/perl

use strict;
use warnings;

my $ref = {field1 => "test", field2 => [5,6,7,8,9]};

print $ref->{field2}->[0],"\n";
print $ref->{field2}->[1],"\n";
print $ref->{field2}->[2],"\n";
print $ref->{field2}->[3],"\n";
print $ref->{field2}->[4],"\n";
这将输出:

5
6
7
8
9

您可以访问hashrefs内部的arraysrefs,如下所示:

$rec->{field2}->[$i] 
其中$i是要访问的元素的索引

你好,蒂姆

编辑:添加了完整的工作示例

#!/usr/bin/perl

use strict;
use warnings;

my $ref = {field1 => "test", field2 => [5,6,7,8,9]};

print $ref->{field2}->[0],"\n";
print $ref->{field2}->[1],"\n";
print $ref->{field2}->[2],"\n";
print $ref->{field2}->[3],"\n";
print $ref->{field2}->[4],"\n";
这将输出:

5
6
7
8
9

+ 1. 请注意,匿名引用可以获得相同的效果:
field2=>[1,2,3]
。有关参考文献的教程介绍,请参见。+1。请注意,匿名引用可以获得相同的效果:
field2=>[1,2,3]
。有关参考的教程介绍,请参见。注意,Perl术语实际上是“散列”而不是“记录”;散列被称为具有“元素”而不是“字段”。(这些元素是由“键”索引的“值”。)如果你想变得更有趣,你也可以将散列称为“关联数组”,而不是像你的
@array
那样的“常规数组”。“关联数组”不是更有趣,只是更古老。当Perl5发布时(二十年前),术语发生了变化。如果你把散列称为关联数组,人们会认为你的Perl知识已经过时了:-@DaveCross:“Fancier”可能不是我最好的选择,但这不仅仅是因为它更老了。例如,
perldata
仍然解释Perl具有“标量的关联数组,称为‘哈希’”。本质上,“hash”在Perl中专门指关联数组,而“关联数组”是(与语言无关的)概念的通用术语,hash就是一个例子。这就像谈论“局部变量”和“用
my
声明的变量”之间的区别一样;散列被称为具有“元素”而不是“字段”。(这些元素是由“键”索引的“值”。)如果你想变得更有趣,你也可以将散列称为“关联数组”,而不是像你的
@array
那样的“常规数组”。“关联数组”不是更有趣,只是更古老。当Perl5发布时(二十年前),术语发生了变化。如果你把散列称为关联数组,人们会认为你的Perl知识已经过时了:-@DaveCross:“Fancier”可能不是我最好的选择,但这不仅仅是因为它更老了。例如,
perldata
仍然解释Perl具有“标量的关联数组,称为‘哈希’”。本质上,“hash”在Perl中专门指关联数组,而“关联数组”是(与语言无关的)概念的通用术语,hash就是一个例子。这就像谈论“局部变量”和“用
my
声明的变量”之间的区别一样。谢谢你的回答,但这似乎不起作用。欢迎你:)这里有一个完整的例子,对我来说很好,在上面的代码中,你必须用0或任何你想要的索引替换$i。这就是它的工作原理:#/usr/bin/perl使用严格;使用警告;我的$ref={field1=>“test”,field2=>[5,6,7,8,9]};打印$ref->{field2}->[0],“\n”;打印$ref->{field2}->[1],“\n”;打印$ref->{field2}->[2],“\n”;打印$ref->{field2}->[3],“\n”;打印$ref->{field2}->[4],“\n”;这将产生以下输出:tim@tim-V5-131:~$perl Desktop/t.pl 5 6 7 8 9那么再见。。。将在我的答案中添加完整的示例。最后一个
->
是不需要的,因此
$ref->{field2}[4]
也可以工作。谢谢你的答案,但这似乎不起作用。欢迎:)这是一个完整的示例,对我来说很好,在上面的代码中,你必须用0或任何你想要的索引替换$i。这就是它的工作原理:#/usr/bin/perl使用严格;使用警告;我的$ref={field1=>“test”,field2=>[5,6,7,8,9]};打印$ref->{field2}->[0],“\n”;打印$ref->{field2}->[1],“\n”;打印$ref->{field2}->[2],“\n”;打印$ref->{field2}->[3],“\n”;打印$ref->{field2}->[4],“\n”;这将产生以下输出:tim@tim-V5-131:~$perl Desktop/t.pl 5 6 7 8 9那么再见。。。将在我的答案中添加完整的示例。不需要最后一个
->
,因此
$ref->{field2}[4]
也可以使用。