【发布时间】:2020-06-02 05:34:02
【问题描述】:
我有一段代码带有一个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 =~ /$_/;
}
感谢您的建议。
问候
注意:我还没有尝试过这段代码,只是猜测我可以这样做,但我主要想知道这是否“干净”或者是否有更清洁的方法
【问题讨论】:
-
试试看是否有效。
-
显然是这样。但是干净吗? :)
-
更好的方法可能是将所有模式组合成一个带有
|分隔符的正则表达式,这样就不需要foreach循环。 -
有一个模块可以更有效地处理硬模式。见metacpan.org/pod/Regexp::Assemble
-
@simbabque, 前段时间,Perl 采用了使用 try 进行交替。 R::A 不再需要了。