可以在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]
也可以使用。