这个问题可能看起来很简单,但过去几天我在考虑这个问题,我找不到答案.
我有多级脚本架构(代码如下所示)
CallingScript.pl(包含toplevel库并检查编译器错误)
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@ || $!);
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@);
do "IncludesConsumer.pm";
print "\n callingScript error : $@" if($@);
Run Code Online (Sandbox Code Playgroud)
IncludesConsumer.pm(添加库INCLUDES.pm并具有自己的功能)
do "INCLUDES.pm";
print "\nin IncludesConsumer";
Run Code Online (Sandbox Code Playgroud)
INCLUDES.pm(一个地方有多个模块,充当库)
use Module;
print "\n in includes";
Run Code Online (Sandbox Code Playgroud)
Module.pm(语法错误)
use strict;
sub MakeSyntaxError
{
print "\nerror in Module
}
1;
Run Code Online (Sandbox Code Playgroud)
在概念上,一旦核心模块(例如Module.pm)可能包含语法错误.所以我需要在CallingScript.pl中捕获它们.即:我想捕获文件中的Module.pm(低级)语法错误CallingScript.pl.
OUTPUT:
D:\Do_analysis>CallingScript.pl
in IncludesConsumer
in IncludesConsumer
in IncludesConsumer
Run Code Online (Sandbox Code Playgroud)
为什么编译器错误没有被CallingScript.pl捕获?请倾注你的想法.
谢谢!
五个错误,从导致问题的问题开始:
do.$!一些时间.$!即使有错误也可以是真的.只有检查$!既do和$@都是假的.1;).您需要返回true,因此do返回true,因此您知道是否发生了错误.你use没有的文件package.
CallingScript.pl:
do "IncludesConsumer.pm" or die "CallingScript: ".($@ || $!);
do "IncludesConsumer.pm" or die "CallingScript: ".($@ || $!);
do "IncludesConsumer.pm" or die "CallingScript: ".($@ || $!);
Run Code Online (Sandbox Code Playgroud)IncludesConsumer.pm (实际上不是"下午"):
do "INCLUDES.pm" or die "IncludesConsumer: ".($@ || $!);
print "\nin IncludesConsumer";
1;
Run Code Online (Sandbox Code Playgroud)INCLUDES.pm (实际上不是"下午"):
use Module;
print "\n in includes";
1;
Run Code Online (Sandbox Code Playgroud)Module.pm (语法错误)
package Module;
sub MakeSyntaxError {
1;
Run Code Online (Sandbox Code Playgroud)没有理由以do这种方式使用.这是一个非常糟糕的编程实践.请避免使用模块.