use warnings;
use Test::More;
use File::Find::Rule;
use Test::File::Find::Rule;
my $rule = File::Find::Rule->file->name('*.pl')->not_grep(qr/^\s*use\s+strict;/m, sub { 1 });
match_rule_no_result($rule, ".", 'use strict usage');
done_testing();
,输出结果为:
out put :
ok 1 - use strict usage
1..1
即使我的脚本不使用strict,它总是通过测试,就像这个位于“。”内的脚本一样。目录。 在http://metacpan.org/pod/Test::File::Find::Rule
上可以使用相同的代码作为示例任何线索?
F。
答案 0 :(得分:10)
请考虑使用Perl::Critic,这可以更可靠地执行此操作,可配置,并且可以执行更多操作。甚至有Test::Perl::Critic来执行它。
Perl :: Critic还具有了解Moose之类的能够打开限制的优势。
答案 1 :(得分:3)
要检查use strict
,请执行以下操作:
my $rule = File::Find::Rule
->file->name('*.pl')
->not_grep( qr/^\s*use\s+strict;/ )
;
<强>更新强>
我同意Schwern和jrockway:有一个更好的模块来执行use strict
。
那就是说,这就是我能够弄清楚你问题细节的原因。
Test::File::Find::Rule提供的use strict
示例被误导。
据我了解,File::Find::Rule中的grep
方法将使用提供的每个说明符评估文件的每一行,在第一个时停止(即保留文件在其结果集中)评价。 File::Find::Rule
提供了一个示例,确保每个文件开始与shebang行。如果第一行未通过正则表达式,则下一个说明符(匿名子例程)将始终返回true,并且将找到不符合要求的文件。
$rule->grep( qr/^#!.*\bperl/, [ sub { 1 } ] );
但是,对于use strict
测试,您不希望将自己限制在第一行。此外,not_grep
方法不需要额外的说明符:如果文件中没有任何行与正则表达式匹配,我们将保留文件。希望有所帮助。