我一直在研究CPAN模块的一个分支,该分支现在不再维护(据我所知)。在此模块中,它们用于$@
将错误消息向上传递到堆栈。换句话说,他们$@
在调用子例程时设置是否出错,然后在调用之后检查是否已设置。我以前从未见过此变量,但我认为它很有用,因此我开始在代码中以相同的方式使用它。现在,我最近阅读了更多有关它的内容,发现它的用途要比此狭窄。阅读perlvar(以及有关此问题的其他SO问题)并不能完全为我解答,但是,使用$@
这种方式可以吗?我知道某些“标点符号”变量绝对不应该以这种通用方式使用(有些甚至local
),这是其中一种情况,还是可以继续这种做法?
$@
是Perl中相对“非特殊”的特殊变量。Perl中的任何内容都不会从中读取$@
,并且只能eval {}
在末尾由一个块写入。这样可以相对安全地用于自己的错误通知目的。
特别是,IO::Socket
模块的核心树使用它来指示构造函数的失败:
use IO::Socket::IP;
my $sock = IO::Socket::IP->new(...) or die "Cannot connect - $@";
比较传统的$!
方法在这里不合适,因为它$!
具有包装libc级errno
结构的魔力。表示errno
即使将其读取为数字或字符串,也只能将其设置为整数值。因为有时会发生与errno
值不直接相关的IO::Socket
故障(例如,很多解析器故障),因此有时$!
是不合适的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句