Perl следующий, если регулярное выражение хранится в массиве - PullRequest
3 голосов
/ 18 февраля 2020

У меня есть фрагмент кода с aa, в то время как l oop и несколько следующих if, как в l oop:

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.*/,
                 ],
 ....

и в моем l oop, я должен использовать что-то подобное? :

foreach (@{ $myhash{exclude_acct} }) {
    next LOOP if $UPUPRF =~ /$_/;
}

спасибо за ваши советы.

уважает

примечание: я еще не пробовал этот код, просто догадываясь, что я мог бы сделать это так, но я в основном задаюсь вопросом, является ли это "чистым" или есть более чистый способ сделать это

1 Ответ

4 голосов
/ 18 февраля 2020

Это нормально, но запуск движка регулярных выражений относительно дорог, поэтому он будет быстрее, чем создание одного регулярного выражения из множества.

# Once, before the loop.
my $pat = join "|", @{ $myhash{exclude_acct} };
my $re = qr/$pat/;

# In the loop.
next LOOP if $UPUPRF =~ $re;

Хотя это может нарушить обратные ссылки (\1).

...