grep或map以在perl中查找use语句

时间:2013-03-26 02:53:52

标签: regex perl

我正在尝试编写一个perl模块,它将另一个文件作为输入并打印所有use语句(严格和警告除外)

my @result = grep /use\s+([^;(strict|warnings)]+)/, @file;

打印:

use Package1;
use Package2;

但是我只想要“Package1”部分。因此,当使用地图时:

my @result = map /use\s+([^;(strict|warnings)]+)/, @file;

这会返回错误的值。(返回前2或3个字符)

my @result = map /use\s+([^;]+)/, @file;

返回Package1,Package2,strict,warnings。

我可以知道如何在第一个map语句中更正正则表达式吗?

由于

2 个答案:

答案 0 :(得分:3)

有这样做的模块。 Perl::PrereqScannerDist::Zilla使用的,我发现它的效果非常好。

Neil Bowers a nice review of the available solutions。感谢@JoelBerger在评论中指出这一点。

对于通用Perl代码扫描,最好使用了解Perl语法的PPI。 Perl :: PrereqScanner和Perl::Critic之类的东西使用它。

答案 1 :(得分:2)

投入grep过滤:

my @result = grep { !/^(?:strict|warnings)$/ } map /use\s+([^;]+)/, @file;