我正在运行perl5.6.1建sun4-solaris64int

我呼吁印在一个阵列:

print "@vals\n";

和输出这样的:

HASH(0x229a4) uid cn attuid

或者另外一个例子:

@foo = {};
push(@foo, "c");

print "@foo I am done now\n";

与产出:

HASH(0x2ece0) c I am done now

哪里是 HASH(0x2ece0) 来自何处?

有帮助吗?

解决方案

您在@foo括号= {}创建它。括号创建一个无名散列引用。

如果要@foo设置为空列表,使用@foo =()

其他提示

要了解这类问题的关键是,你在输出中获得额外的项目。这不是太重要的项目是什么。

在一般情况下,你会想要做的,当你的容器变量有更多(或更少),它比预期的第一件事是看它的内容。数据::自卸车模块自带Perl和几乎可以为您的打印数据结构:

use Data::Dumper;
print Dumper( \@foo );

一旦你看到的就是你的货柜里,你就可以开始工作落后,找出它在那里是如何得到。你会最终落得注意到,您初始化@foo,它已经有一个元素,这是不是你想要的东西之后。

另一个窍门是检查在列表中的元素数:

print "There are " . @array . " elements in \@array\n";

如果你得到一个数字,你不要指望,工作落后找出来的时候,额外的元素出现了。

你不小心有一散列参考@foo。当你打印一个参考出没有取消引用它(几乎总是通过事故),你会得到一个调试string(类型的参考和存储位置)。

我觉得你想要的 my @foo = (); push @foo, "c"; 而不是什么你现在有。另一方面,你也可以简单地说 my @foo; 创建该阵列。你不需要明确标记为空白带 ().

看看 perldoc perlreftutperldoc perlref 欲了解更多有关参考文献。

您的代码应该这样写:

use strict;
use warnings;

my @foo;
push @foo, "c";

print "@foo I am done now\n";

您不必在Perl初始化变量,如果你想有一个空的变量。然而,你应该使用my声明一个局部变量。而且你不需要的括号内置的功能,只是添加了混乱。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top