This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
point out another use for //o
authorDavid Mitchell <davem@iabyn.com>
Fri, 15 Jun 2012 10:37:55 +0000 (11:37 +0100)
committerDavid Mitchell <davem@iabyn.com>
Fri, 15 Jun 2012 11:16:23 +0000 (12:16 +0100)
Sometimes patterns with embedded code are recompiled each time even
if the pattern string hasn't changed.

pod/perlop.pod

index ced33b0..3edeabd 100644 (file)
@@ -1734,6 +1734,18 @@ you want the pattern to use the initial values of the variables
 regardless of whether they change or not.  (But there are saner ways
 of accomplishing this than using C</o>.)
 
+=item 3
+
+If the pattern contains embedded code, such as
+
+    use re 'eval';
+    $code = 'foo(?{ $x })';
+    /$code/
+
+then perl will recompile each time, even though the pattern string hasn't
+changed, to ensure that the current value of C<$x> is seen each time.
+Use C</o> if you want to avoid this.
+
 =back
 
 The bottom line is that using C</o> is almost never a good idea.