Perl:检查语法时捕获不正确的子程序模块名称?

时间:2014-04-08 02:25:23

标签: perl syntax

如果我有一个perl模块,例如:

package mytest;
use base 'Exporter';
our @EXPORT = qw(mysub);

sub mysub
{
 print "foo";
}
1;

如果代码在函数名称中出现拼写错误,我如何使用perl -c(语法检查)来捕获?目前我试过这个:

use strict;
use warnings;
use mytest;

&mysub();
&mysup(); # <-- Run time crash that is not captured with perl -c myfile.pl
mysup(); # <-- Also not captured with perl -c myfile.pl

1 个答案:

答案 0 :(得分:1)

你做不到。

-c选项仅检查Perl文件的语法是否正确。调用不存在的子例程是语义错误,并且因为Perl子例程可以在运行时的任何时刻定义,所以只有在尝试调用子例程时才能诊断它。

顺便提一下,包名称等全局标识符应该大写,因此您的包应该被称为Mytest,而来源应该在Mytest.pm

此外,使用&号&前缀调用子例程也是不好的做法。你的主程序应该是这样的

use strict;
use warnings;

use Mytest;

mysub();
mysup();
mysup();