如何检查另一个不使用 perl -c 的 perl 脚本的语法? [复制]
Posted
技术标签:
【中文标题】如何检查另一个不使用 perl -c 的 perl 脚本的语法? [复制]【英文标题】:How to check syntax of a perl script inside another one not using perl -c? [duplicate] 【发布时间】:2016-07-03 08:58:14 【问题描述】:我在 B.pl 中有 2 个 perl 脚本 A 和 B. 我想检查 A.pl 中是否有语法错误
我正在使用$result =`perl -c A.pl`;
,但无法在$result
中获得输出。
我需要一个 perl 命令来做到这一点。你能帮忙吗?
【问题讨论】:
要捕获外部命令的输出,请参阅perlop
中的qx
运算符。有关更高级的捕获,另请参阅 Getting STDOUT, STDERR, and response code from external *nix command in perl。
【参考方案1】:
您可以捕获输出并检查字符串syntax OK
A.pl
#!/usr/bin/env perl
use warnings;
use strict;
main();
exit 0;
sub main
my ($stuff) = @_;
# Syntax Error
print $stufff;
# Runtime Error
pint $stuff;
# Runtime Error
print $stuff->foo();
B.pl
#!/usr/bin/env perl
use warnings;
use strict;
use Test::More;
for my $file ( qw( A.pl B.pl ) )
# 2>&1 means redirect STDERR to STDOUT so we can capture it
chomp(my ($result) = qx( /usr/bin/env perl -cw $file 2>&1 ));
ok( $result =~ m|syntax OK|m, "$file compiles OK" )
or diag( "$file failed to compile : $result" );
done_testing();
输出
perl B.pl
not ok 1 - A.pl compiles OK
# Failed test 'A.pl compiles OK'
# at B.pl line 8.
# A.pl failed to compile : Global symbol "$stufff" requires explicit package name at A.pl line 12.
ok 2 - B.pl compiles OK
1..2
# Looks like you failed 1 test of 2.
【讨论】:
【参考方案2】:my $res = system("perl -c test.pl");
unless ($res)
print "OK\n";
else
print "Syntax error!\n";
【讨论】:
作者说不行。并且 backtics 捕获 STDOUT,而不是 STDERR perl 报告错误。最好在发布之前检查您的代码。以上是关于如何检查另一个不使用 perl -c 的 perl 脚本的语法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Perl 中使用 grep 检查字符串是不是存在 [重复]
如何检查 Perl-CGI 应用程序中的所有错误(例如,使用 Perl 编译器或类似 lint 的工具检查,免费开源?)