【问题标题】:grep or map to find use statements in perlgrep 或 map 在 perl 中查找 use 语句
【发布时间】:2013-03-15 17:53:53
【问题描述】:

我正在尝试编写一个 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,warnings。

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

谢谢

【问题讨论】:

  • 这只是学习正则表达式和 map/grep 的测试用例,还是您实际上是在尝试查找 use/require 语句?如果是后者,则有执行此操作的模块。
  • @JoelBerger 后者。你能指出我正确的方向吗?谢谢
  • 看来 Schwern 打败了我。也就是说,请参阅我的评论。

标签: regex perl


【解决方案1】:

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

尼尔鲍尔斯有a nice review of the available solutions。感谢@JoelBerger 在 cmets 中指出这一点。

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

【讨论】:

【解决方案2】:

输入grep 进行过滤:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多