我有以下
的arraytest.pmpackage arraytest;
our @myarray = {"1", "2", "3", "4"};
我试图从不同的perl脚本中获取值
use arraytest;
foreach (@arraytest::myarray) {
print "$arraytest::myarray\n";
}
我没有打印任何内容也没有错误。如果引用数组是正确的,请告诉我吗?
提前致谢
答案 0 :(得分:5)
Yer数组语法错误。
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
。
答案 1 :(得分:3)
始终使用
use strict;
use warnings;
问题是您正在尝试编写根本不存在的$arraytest::myarray
变量的内容。试试这个:
foreach my $val (@arraytest::myarray) {
print "$val\n";
}
并且您的数组也不包含您的期望。你在数组的第一个单元格中有哈希引用。你应该使用:
our @myarray = ("1", "2", "3", "4");
答案 2 :(得分:0)
你尝试实现类似的目标:
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";
}
}