0

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

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、警告。

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

谢谢

4

2 回答 2

3

有一些模块可以做到这一点。 Perl::PrereqScannerDist::Zilla使用的,我发现它工作得很好。

Neil Bowers对可用的解决方案进行了很好的评论。感谢@JoelBerger 在评论中指出这一点。

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

于 2013-03-26T05:58:24.680 回答
2

输入一个grep过滤器:

my @result = grep { !/^(?:strict|warnings)$/ } map /use\s+([^;]+)/, @file;
于 2013-03-26T03:00:06.583 回答