[英]Perl next if regex stored in array
我有一段带有 while 循环的代码和几个 next if 在循环中是这样的:
LOOP:
while (something) {
next if $UPUPRF =~ /^T[0-9]{6}/;
next if $UPUPRF =~ /^SECURITE.*/;
next if $UPUPRF =~ /^AUDIT[A-Z]{2}/;
}
我想将这些正则表达式放在我的配置文件(perl 数据结构)中,而不是将它们“硬编码”在脚本中,以便用户只需编辑配置文件即可轻松编辑它们,并希望您对此提出建议.
这样做最干净的方法是什么?
首先,我想我可以在配置文件中存储这样的正则表达式吗? (使用qr//):
....
exclude_acct => [
qr/^T[0-9]{6}/,
qr/^AUDIT[A-Z]{2}/,
qr/^SECURITE.*/,
],
....
在我的循环中,我应该使用这样的东西吗? :
foreach (@{ $myhash{exclude_acct} }) {
next LOOP if $UPUPRF =~ /$_/;
}
谢谢你的建议。
问候
注意:我还没有尝试过这段代码,只是猜测我可以这样做,但我主要想知道这是否“干净”或者是否有更干净的方法来做到这一点
这很好,但是启动正则表达式引擎的成本相对较高,因此比从众多正则表达式中创建一个正则表达式要快。
# Once, before the loop.
my $pat = join "|", @{ $myhash{exclude_acct} };
my $re = qr/$pat/;
# In the loop.
next LOOP if $UPUPRF =~ $re;
不过,这可能会破坏反向引用( \\1
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.