问题标签 [autodie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
905 浏览

perl - Perl 模块 autodie 和 Fatal 有什么区别?

Perl 模块 autodieFatal似乎在做类似的事情。优先使用其中一种的原因是什么?

0 投票
4 回答
3081 浏览

perl - autodie有缺点吗?

我时不时地在 StackOverflow 上看到人们推广autodie的使用。但是在这里和网络其他地方的代码中,我不经常看到自动死亡。有一些缺点吗?使用 autodie 时我会丢失一些东西吗?(在使用 autodie 时,我有被宠坏的想法)

0 投票
1 回答
310 浏览

perl - autodie-pragma 对编码有影响吗?

为什么我在“autodie”之后得到不同的输出?

0 投票
3 回答
602 浏览

perl - 如何将 autodie 与非内置函数一起使用?

autodie 文档提示可以将它用于其他功能,而不是默认情况下可以处理的内置功能,但没有明确的示例如何在其中执行此操作。

具体来说,我想将它用于 Imager 模块。很多功能和方法都可能失败,如果这不意味着我的代码会到处都是or die Imager|$image->errstr;短语,我会更喜欢。

当然,如果除了使用 autodie 之外还有其他方法可以实现这一点,我也会对此感兴趣。

0 投票
2 回答
313 浏览

perl - 像autodie一样死去

autodie用来处理内置程序的异常。不幸的是,它的范围是词法的, autodie不适用于方法。是否可以从我的类方法中抛出异常,以便以与 autodie 异常相同的方式处理它们。简而言之,我不希望我的类的用户以两种方式处理异常——一种使用 autodie 为内置函数提供的丰富异常类,另一种用于die if ...我的代码抛出的简单“”。

如果有帮助,我会用它Moose来构建我的课程

0 投票
1 回答
191 浏览

perl - 从 IO::File 获取异常?

与直接使用 perl 的内置 IO 函数相比,IO::File、IO::Socket::INET 模块具有一些优势,例如具有显式语法来刷新句柄。

但是,它们似乎比内置的 IO 功能有一些缺点。例如,据我所知,它们不能与 autodie 模块结合使用以引发故障异常,因此我发现自己必须编写更多样板代码来处理故障,而不是使用内置函数。

有没有办法将两者结合起来,或者其他一些具有结合功能的模块?我注意到一些用途有限的 IO 模块,例如 File::Slurp,确实允许更灵活的错误处理。

我正在编写模块代码,理想情况下,该解决方案应该可以一直追溯到 perl 5.10.0。

0 投票
1 回答
363 浏览

perl - PERL Net::SFTP::Foreign autodie=>0 然后 1

我正在编写一个脚本,该脚本每天在某个 sftp 服务器上自动检索一些文件。问题是这个 sftp 服务器不是很可靠,有时客户端必须重试几次才能成功打开会话。我选择 Net::SFTP::Foreign 的原因有很多(特别是因为它使用系统中的本机 ssh 命令)。

我写了一个循环,以便在放弃之前重试打开的 sftp 会话 3 次。

我的问题:我想保留 autodie=1 因为它会自动处理代码中稍后使用的所有方法的不可恢复错误。但是 autodie=1 阻止我在会话打开期间捕获任何错误(Net::SFTP::Foreign->new),因此重试部分是无用的。

这是我编写的代码部分,autodie 设置为 0 以使重试部分工作(但我希望 autodie=1)。是否可以使用 autodie=>0 打开 sftp 连接,以便重试部分实际工作,然后使用 autodie=>1 更改此值以便自动处理不可恢复的错误?

任何帮助将非常感激 :)

0 投票
2 回答
999 浏览

perl - Perl : 名称 "main::IN" 只使用过一次,但实际使用过

我编写了一个读取文件的简短 perl 脚本。见tmp.txt

我的 perl 程序convert.pl是:

它输出:

我用过IN,所以我不明白这个Name "main::IN" used...警告。它为什么抱怨?

0 投票
1 回答
109 浏览

perl - 在作用域“no autodie”之后,程序在“*STDOUT”处死掉

这个节目

中止

重申代码中的注释:如果首先有一个use autodie;语句,那么一切都很好。(一切都很好,只有use autodie;也很好。)奇怪的是,在与no autodie声明相同的范围内,我也没有看到这样的问题。只有超出其范围的代码才会失败!有点反作用域,嗯?

如果这个作用域no autodie使用之后出现的,*STDOUT那么一切都很好。*STDOUT在(范围内)之后进一步使用,no autodie会使程序失败。

文档中提到了一个涉及裸词(我不完全理解)的问题,并且该程序确实失败了STDOUT- 但我将它作为*STDOUT.

所以它似乎*STDOUT被视为用户的子,但我不明白这一点,也不明白范围是如何autodie被击败的。(在某些版本中提到范围泄漏是一个错误,但以一种看似无关的方式。)这存在一个实际问题。

我不在autodie我的代码中使用。但是考虑一下我确实使用的这个子

失败是合法的open,因此我们必须autodie在该范围内禁用,以防子用户打开它。那么所描述的行为会受到伤害吗?在什么情况下?

我对这种效果no autodie和它超出其范围的泄漏以及它们所有奇怪的细节感到困惑。但真正令人担忧的是,我不确定如何保护使用上述库的代码免受这种行为的影响,因为我不理解它。有任何想法吗?

我在 CentOS 7.8 上的 5.16.3(系统)、5.26.2 和 5.30.0(perlbrew)下看到了这个

我在 5.32.0 上看不到这种行为那里没有失败。


与的... or die $!检查open没有任何区别,因此为简单起见未显示。