如何在Perl构造函数中定义一个空数组?

4

我是Perl的初学者,如果听起来有些愚蠢-对不起 :)

我的问题是-我试图编写一个类,该类在构造函数中定义了一个空数组。 因此,我像这样编写:

package MyClass;

use strict;

sub new {
    my ($C) = @_;
    my $self = {
        items => ()
    };
    bless $self, ref $C || $C;
}

sub get {
    return $_[0]->{items};
}

1;

稍后我将使用简单的脚本测试我的类:
use strict;
use Data::Dumper;
use MyClass;

my $o = MyClass->new();
my @items = $o->get();

print "length = ", scalar(@items), "\n", Dumper(@items);

运行脚本时,我得到了以下结果:

$ perl my_test.pl 
length = 1
$VAR1 = undef;

为什么我会做错事情,导致我的items数组被填充了undef

也许有人可以给我展示一个类应该如何定义的例子,这样我就不会在我的数组中得到任何默认值了?

1个回答

10
匿名数组引用的构造方法是[]而不是(),后者用于将语句分组成列表。在本例中,()会展开为空列表,然后perl看到my $self = { item => };。如果你使用了use warnings;,你应该会得到一个相关的警告信息。
另外,在你的get子程序中,你可能想要取消引用你的字段以返回列表,而不是返回数组的引用:@{$self->{item}}
sub get {
    return @{ $_[0]->{items} };
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接