![](/img/trans.png)
[英]Using Find::File::Rule to find Perl scripts and exclude .bak files
[英]Test::File::Find::Rule check that all our perl scripts have use strict
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
即使我的腳本未使用嚴格腳本,它始終可以通過測試,就像位於“”中的腳本一樣。 目錄。 在http://metacpan.org/pod/Test::File::Find::Rule中可以使用相同的代碼作為示例
有什么線索嗎?
F。
考慮改用Perl :: Critic ,它可以更可靠地完成此操作,並且是可配置的,並且可以執行更多操作。 甚至還有Test :: Perl :: Critic來強制執行它。
Perl :: Critic還具有了解Moose之類的東西的優勢,這些東西會打開狹窄部位。
要檢查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
方法not_grep
其他說明符:如果文件中沒有任何行與正則表達式匹配,我們將保留該文件。 希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.