Как сделать вы заставляете Perl повторно компилировать регулярное выражение, скомпилированное с помощью «/ o», по запросу?

Технический вопрос:

Учитывая регулярное выражение:

my $regEx = qr{whatever$myVar}oxi; # Notice /o for "compile-once"

Каков наиболее эффективный способ заставить его перекомпилировать по запросу ? (например, когда я знаю из логики программы, что значение $ myVar изменилось) без отбрасывания / o и в зависимости от внутреннего интеллекта Perl для автоматической перекомпиляции?

ПРИМЕЧАНИЕ. Регулярное выражение используется в подстановка, которая может повлиять на правила повторной компиляции sans / o:

$string2 =~ s/$regEx//;

Контекст таков:

  • У меня есть регулярное выражение, которое создается путем всасывания довольно длинной (> 1 КБ) строки из конфигурационного файла.

    • Этот файл перечитывается каждые 60 минут.

    • Если строка, считанная из файла, изменяется (как определено путем изменения метки времени файла), я хочу повторно скомпилировать регулярное выражение, используя повторно пропущенное строковое значение в $ myVar .

  • Регулярное выражение используется неоднократно и часто в модуле Perl, работающем под управлением mod_perl.

    • Это означает, что (в сочетании с длиной строки> 1-2k) я должен использовать "

      $ perl -e '{for (my $i=0; $i<3; $i++) {
                       my $re = qr{$i}oix; $s="123"; $s =~ s/$re//; 
                       print "i=$i; s=$s\n"; }}'
      i=0; s=123
      i=1; s=123
      i=2; s=123
      
      $ perl -e '{ for (my $i=0; $i<3; $i++) { 
                        my $re = qr{$i}ix; $s="123"; $s =~ s/$re//; 
                        print "i=$i; s=$s\n"; }}'
      i=0; s=123
      i=1; s=23
      i=2; s=13
      
7
задан DVK 1 June 2011 в 20:15
поделиться