我目前在perl中编写脚本来解析perl模块并从中获取有意义的单词。 (除了perl关键字)。
我有一个拒绝列表数组,其中包含perl关键字。我用它来将有意义的单词与perl关键字分开。
my $pattern = join("|", @rejectionlist);
foreach my $word (@words) {
if (!($word =~ /^$pattern$/i)) {
push @meaningfulwords, $word;
}
}
是否可以动态生成perl关键字(拒绝列表数组 - 使用任何例程)?
答案 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)';