Perl中的多级"做"?

Inn*_*elt 2 perl perl-module

这个问题可能看起来很简单,但过去几天我在考虑这个问题,我找不到答案.

我有多级脚本架构(代码如下所示)

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捕获?请倾注你的想法.

谢谢!

ike*_*ami 5

五个错误,从导致问题的问题开始:

  • 你没有处理一些错误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这种方式使用.这是一个非常糟糕的编程实践.请避免使用模块.