在Perl中,如何在二维数组的元素上使用'defined'函数?

384*_*X21 3 perl multidimensional-array autovivification defined

我试图使用Perl中定义的函数来检查是否定义了元素.

代码:

$mylist[0][0]="wqeqwe";
$mylist[0][1]="afasf";
$mylist[1][0]="lkkjh";

print scalar(@mylist), "\n";

if (defined($mylist[2][0])){print "TRUE\n";}

print scalar(@mylist), "\n";
Run Code Online (Sandbox Code Playgroud)

产量

2
3
Run Code Online (Sandbox Code Playgroud)

在使用定义函数之前,第一维中有两个元素@myarray.使用定义的函数后,元素数量增加到3.

如何在不添加新元素的情况下使用已定义的函数?

Tim*_*Tim 7

首先检查第一级引用是否存在.

if ( defined($mylist[2]) && defined($mylist[2][0]) ) {
    print "TRUE\n";
}
Run Code Online (Sandbox Code Playgroud)

您遇到的内容称为autovivification:在某些情况下,Perl会在您使用它们时创建复杂的数据结构,就好像它们已经存在一样.


hob*_*bbs 5

有趣的是,有一个非核心的pragma称为autovivification,如果你在no autovivification;你的问题下运行你的代码就会消失.