从perl模块文件访问全局数组

时间:2013-07-28 19:23:18

标签: arrays perl

我有以下

的arraytest.pm
package arraytest;

our @myarray = {"1", "2", "3", "4"};

我试图从不同的perl脚本中获取值

use arraytest;

foreach (@arraytest::myarray) {
  print "$arraytest::myarray\n";
}

我没有打印任何内容也没有错误。如果引用数组是正确的,请告诉我吗?

提前致谢

3 个答案:

答案 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;

哦,请不要在包裹上使用小写名称。这些是为影响编译的实用模块保留的,如strictfeature

答案 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";
    }
}