2

我有下面的arraytest.pm

package arraytest;

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

我正在尝试从不同的 perl 脚本中获取值

use arraytest;

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

我什么也没打印,也没有错误。请让我知道引用数组是否正确?

提前致谢

4

3 回答 3

5

你的数组语法是错误的。

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.

于 2013-07-28T19:29:07.103 回答
3

始终使用

use strict;
use warnings;

问题是您正在尝试编写$arraytest::myarray根本不存在的变量内容。尝试这个:

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

而且您的数组也不包含您期望的内容。您在数组的第一个单元格中有哈希 ref。你应该使用:

our @myarray = ("1", "2", "3", "4");
于 2013-07-28T19:29:21.140 回答
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";
    }
}
于 2013-07-28T19:45:53.473 回答