Does the 'o' modifier for Perl regular expressions still provide any benefit?

后端 未结 6 1849
醉话见心
醉话见心 2020-11-29 07:48

It used to be considered beneficial to include the \'o\' modifier at the end of Perl regular expressions. The current Perl documentation does not even seem to list it, cert

6条回答
  •  余生分开走
    2020-11-29 08:41

    I'm sure it's still supported, but it's pretty much obsolete. If you want the regex to be compiled only once, you're better off using a regex object, like so:

    my $reg = qr/foo$bar/;
    

    The interpolation of $bar is done when the variable is initialized, so you will always be using the cached, compiled regex from then on within the enclosing scope. But sometimes you want the regex to be recompiled, because you want it to use the variable's new value. Here's the example Friedl used in The Book:

    sub CheckLogfileForToday()
    {
      my $today = (qw)[(localtime)[6]];
    
      my $today_regex = qr/^$today:/i; # compiles once per function call
    
      while () {
        if ($_ =~ $today_regex) {
          ...
        }
      }
    }
    

    Within the scope of the function, the value of $today_regex stays the same. But the next time the function is called, the regex will be recompiled with the new value of $today. If he had just used

    if ($_ =~ m/^$today:/io)
    

    ...the regex would never be updated. So, with the object form you have the efficiency of /o without sacrificing flexibility.

提交回复
热议问题