问题标签 [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.
perl - autodie有缺点吗?
我时不时地在 StackOverflow 上看到人们推广autodie的使用。但是在这里和网络其他地方的代码中,我不经常看到自动死亡。有一些缺点吗?使用 autodie 时我会丢失一些东西吗?(在使用 autodie 时,我有被宠坏的想法)
perl - autodie-pragma 对编码有影响吗?
为什么我在“autodie”之后得到不同的输出?
perl - 如何将 autodie 与非内置函数一起使用?
autodie 文档提示可以将它用于其他功能,而不是默认情况下可以处理的内置功能,但没有明确的示例如何在其中执行此操作。
具体来说,我想将它用于 Imager 模块。很多功能和方法都可能失败,如果这不意味着我的代码会到处都是or die Imager|$image->errstr;
短语,我会更喜欢。
当然,如果除了使用 autodie 之外还有其他方法可以实现这一点,我也会对此感兴趣。
perl - 从 IO::File 获取异常?
与直接使用 perl 的内置 IO 函数相比,IO::File、IO::Socket::INET 模块具有一些优势,例如具有显式语法来刷新句柄。
但是,它们似乎比内置的 IO 功能有一些缺点。例如,据我所知,它们不能与 autodie 模块结合使用以引发故障异常,因此我发现自己必须编写更多样板代码来处理故障,而不是使用内置函数。
有没有办法将两者结合起来,或者其他一些具有结合功能的模块?我注意到一些用途有限的 IO 模块,例如 File::Slurp,确实允许更灵活的错误处理。
我正在编写模块代码,理想情况下,该解决方案应该可以一直追溯到 perl 5.10.0。
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 更改此值以便自动处理不可恢复的错误?
任何帮助将非常感激 :)
perl - Perl : 名称 "main::IN" 只使用过一次,但实际使用过
我编写了一个读取文件的简短 perl 脚本。见tmp.txt
:
我的 perl 程序convert.pl
是:
它输出:
我用过IN
,所以我不明白这个Name "main::IN" used...
警告。它为什么抱怨?
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
没有任何区别,因此为简单起见未显示。