加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 使用$@来传递模块中的错误信息

发布时间:2020-12-15 22:02:15 所属栏目:大数据 来源:网络整理
导读:我一直在一个CPAN模块的一个叉子上工作,这个模块现在没有被保护(据我所知).在这个模块中,他们使用$@将错误消息传递给堆栈.换句话说,如果在子程序的任何调用中出现任何问题,他们设置$@,并且在调用之后检查它是否被设置.我以前从未看过这个变量,但我认为这是有
我一直在一个CPAN模块的一个叉子上工作,这个模块现在没有被保护(据我所知).在这个模块中,他们使用$@将错误消息传递给堆栈.换句话说,如果在子程序的任何调用中出现任何问题,他们设置$@,并且在调用之后检查它是否被设置.我以前从未看过这个变量,但我认为这是有用的,所以我开始在代码中使用相同的方法.现在我最近读了一下,发现它的目的比这更窄一些.阅读 perlvar(和其他SO问题)并没有完全解决这个问题,但是,这样使用$@可以吗?我知道的一些“标点符号”变量绝对不能以这种通用方式使用(有些甚至是本地的),这是这些情况之一,还是我可以继续这种做法吗?

解决方法

$@是Perl中相对“特殊”的特殊变量. Perl中没有任何内容从$@读取,最后只能由eval {}块写入.这使得使用自己的错误信号相对安全.

特别地,模块的核心IO :: Socket树使用它来指示构造函数的失败:

use IO::Socket::IP;
my $sock = IO::Socket::IP->new(...) or die "Cannot connect - $@";

更传统的$!这里不合适,因为$!具有包装libc级错误构造的魔法;这意味着它只能设置为整数errno值,即使它可以读取为数字或字符串.因为有时可能会发生与errno值直接相关的失败(在IO :: Socket的情况下,例如多种解析器故障),有时候是$!是不适合这个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读