簡體   English   中英

測試:: File :: Find :: Rule檢查我們所有的perl腳本都使用嚴格的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM