【发布时间】:2017-07-31 16:30:19
【问题描述】:
我正在运行脚本 A,它将包含文件路径的 ARGV 提供给 perl 脚本 B。这是由
local @ARGV = ($file, $file2, etc.);
do scriptB.pl or die "scriptB has failed";
脚本 B 然后尝试打开文件:
open( my $fh_file, "<", $file )
or die "Could not open file '$file' $!";
但是,如果文件丢失,我不会在 B 中的“or die”之后得到引用的消息。相反,我会在 A 中得到 do scriptB.pl or die 消息。如果我从 A 中删除“or die”,脚本在 B 无声无息地死后继续执行,就好像没有出错一样。
我想知道是否有任何方法可以让 B 打印它的 die 消息?
更好的是,让 B 在无法打开文件后运行代码块的最佳方法是什么?例如,所述代码将写入一个单独的文件,列出丢失的文件,以便用户可以轻松追踪此类错误。
#something like
open( my $fh_file, "<", $file) or {
print "the file could not be found";
die;
}
我发现在网上搜索帮助的唯一一件事是有人提到“或做{}”,但这给了我奇怪的语法错误,所以我不确定我是否正确使用它。
【问题讨论】:
-
“这给了我奇怪的语法错误” 请揭示这些奇怪的错误是什么,并显示产生它们的代码。
-
注意
open ... or do { ... };中的块后面需要一个分号 -
你需要在
scriptB.pl周围加上引号(如果你是use strict,你应该这样做):do "scriptB.pl" or do { if ( $@) { ... } else { die $! }};
标签: perl