我正在尝试编写一个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语句中更正正则表达式吗?
由于
答案 0 :(得分:3)
有这样做的模块。 Perl::PrereqScanner是Dist::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;