首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >取消引用未定义的数组引用时的Perl形象化问题

取消引用未定义的数组引用时的Perl形象化问题
EN

Stack Overflow用户
提问于 2011-06-21 10:08:41
回答 2查看 1.1K关注 0票数 16

我很难理解为什么下面这些方法是有效的:

my $array_reference;
foreach $element (@{$array_reference}) {
# some code
}

而下面的代码不起作用

my $array_reference;
if (scalar (@{$array_reference}) {
    # some code here
}

我知道perl带来了(自动生动的)未定义的引用。但我仍然感到困惑,因为为什么后面的代码段抛出了致命的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-21 12:33:24

在左值上下文中取消引用autovivify (意味着当需要可修改的值时),并且foreach创建左值上下文。

>perl -E"$$x = 1;  say $x;"
SCALAR(0x74b024)

>perl -E"++$$x;  say $x;"
SCALAR(0x2eb024)

>perl -E"\$$x;  say $x;"
SCALAR(0x30b024)

>perl -E"sub {}->($$x);  say $x;"
SCALAR(0x27b03c)

>perl -E"for ($$x) {}  say $x;"
SCALAR(0x25b03c)

后两个函数创建了一个左值上下文,因为它们需要一个值来分别作为$_[0]$_的别名。

票数 11
EN

Stack Overflow用户

发布于 2011-06-21 11:19:36

Perl在这方面有不一致之处,但一般来说,可能修改结构的代码会自动激活,而不会自动激活的代码就会尝试取消引用未定义的值,这会触发警告,或者在use strict "refs"下引发异常。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6419618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档