簡體   English   中英

Perl next if regex 存儲在數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM