-2

由于导出不能与 Perl 脚本一起使用,因此我使用了环境变量。

此代码不会返回任何错误,但perl -c检查 .pm 文件语法的命令不会打印输出。

myscript.pl

$ENV{'PATH'}='C:/Users/abc/Desktop/mno/wwwww/scripts/lib/perl/';

system("perl -c ContentModifySeasonPassOverlayRecord.pm");
4

3 回答 3

1

让我再猜一下你想做什么:

您想批量检查所有 Perl 模块的语法,可能是在一个 cronjob 中。您用来执行此操作的脚本位于您的工作目录(您的框架所在的位置)之外的某个位置。您要检查的脚本也位于其他地方。

您需要做的是perl -c从 lib(框架)所在的位置运行命令,以便运行时脚本的工作目录具有 lib 文件。您需要在调用之前更改工作目录perl -c,并且需要在调用中包含脚本的完整路径

#!/usr/bin/perl
use strict; use warnings;
# Change current working directory to where the framework is
chdir('/home/user/Desktop/QWARTS-0.6/autoinfra/lib/perl/');

# Run the perl -c command for each of your scripts you want to check
foreach my $script (qw(ContentModifySeasonPassOverlayRecord.pm otherfiles.pm)) {
  system("perl -c /path/to/your/scripts/$script");
}
于 2012-09-11T09:47:06.517 回答
0
#!/usr/bin/perl
use warnings;
use strict;
system("perl -c /root/.cpan/build/DateTime-TimeZone-1.31-oqQt_7/lib/DateTime/TimeZone/America/Noronha.pm");

没看懂怎么不行?

# ./errr.pl 
/root/.cpan/build/DateTime-TimeZone-1.31-oqQt_7/lib/DateTime/TimeZone/America/Noronha.pm syntax OK
于 2012-09-11T07:19:25.763 回答
0

我认为您在 perl 脚本中执行 perl 脚本的方法是错误的,这是在 perl 脚本中执行 perl 脚本的正确方法

use strict;
use warnings;
use IPC::System::Simple qw(system capture);

 # Run a command, wait until it finishes, and make sure it works.
 # Output from this program goes directly to STDOUT, and it can take input
 # from your STDIN if required.
 system($^X, "yourscript.pl", @ARGS);

 # Run a command, wait until it finishes, and make sure it works.
 # The output of this command is captured into $results.
 my $results = capture($^X, "yourscript.pl", @ARGS);

并且要检查模块中的错误,您可以在 perl 脚本中“使用”该模块并以通常的方式运行该脚本,如果它有错误,它将抛出到 stdout

如果您想测试大量 perl 模块,您可以为此目的构建一个 shell 脚本。

#!/bin/sh
// List all modules 
MODULES="Data::Dumper Foobar::Test"

for i in $MODULES ; do
if $(perl -M$i -e '1;' >/dev/null 2>&1 ); do
echo "Ok."
else
echo "No." 
fi
done
于 2012-09-11T07:22:14.473 回答