我有下面的arraytest.pm
package arraytest;
our @myarray = {"1", "2", "3", "4"};
我正在尝试从不同的 perl 脚本中获取值
use arraytest;
foreach (@arraytest::myarray) {
print "$arraytest::myarray\n";
}
我什么也没打印,也没有错误。请让我知道引用数组是否正确?
提前致谢
你的数组语法是错误的。
Perl 没有数组字面量。它有
1, 2, 3, 4
[1, 2, 3, 4]
{1 => 2, 3 => 4}
.哈希和数组可以通过分配列表来初始化。
相反,您将数组初始化为包含一个哈希引用作为第一个元素。这相当于
my %hash = (1 => 2, 3 => 4);
our @myarray = (\%hash);
你的意思是
our @myarray = (1, 2, 3, 4); # parens needed because of precedence
或者
our @myarray = 1 .. 4;
哦,请不要为您的包使用小写名称。这些是为影响编译的实用模块strict
保留的,例如或feature
.
始终使用
use strict;
use warnings;
问题是您正在尝试编写$arraytest::myarray
根本不存在的变量内容。尝试这个:
foreach my $val (@arraytest::myarray) {
print "$val\n";
}
而且您的数组也不包含您期望的内容。您在数组的第一个单元格中有哈希 ref。你应该使用:
our @myarray = ("1", "2", "3", "4");
您尝试实现以下目标:
use 5.012;
use warnings;
package MyArr;
our @arr = (1..10);
package main;
for (@MyArr::arr) {
say "$_";
}
#or like above with a helper variable
for my $val (@MyArr::arr) {
say "$val";
}
Ps:以上通常不是一个好习惯。改为使用对象。
编辑 - @dave 的评论
use 5.012;
use warnings;
package MyArr {
our @arr = (1..10);
}
package main {
for (@MyArr::arr) {
say "$_";
}
for my $val (@MyArr::arr) {
say "$val";
}
}