Perl关键字解析

时间:2013-12-02 12:15:51

标签: regex perl keyword-search

我目前在perl中编写脚本来解析perl模块并从中获取有意义的单词。 (除了perl关键字)。

我有一个拒绝列表数组,其中包含perl关键字。我用它来将有意义的单词与perl关键字分开。

my $pattern = join("|", @rejectionlist);
foreach my $word (@words) {
    if (!($word =~ /^$pattern$/i)) {
            push @meaningfulwords, $word;
    }
}

是否可以动态生成perl关键字(拒绝列表数组 - 使用任何例程)?

3 个答案:

答案 0 :(得分:4)

use B::Keywords qw( @Symbols @Barewords );

my %kw;
@kw{( map fc, @Symbols, @Barewords )} = ();

my @meaningfulwords = grep { !exists $kw{ fc($_) } } @words;

答案 1 :(得分:2)

我建议你看看B::Keywords模块。它将所有保留的Perl标识符分类为十个不同的类别,并导出十个相应的名称数组,您可以根据需要使用它们。

顺便说一下你的正则表达式是错误的。您想要/^(?:$pattern)$/

答案 2 :(得分:0)

如果你真的想在这种任务中使用正则表达式,你应该先将每个关键字转义为联合列表。在关键字的开头插入\Q,在关键字的末尾插入\E

my $pattern = '(?:\Q' . join('\E|\Q', @rejectionlist) . '\E)';