This is PerlMonks "Mobile"

Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  


in reply to Re: Matching a string in a parenthesized block (regex help)
in thread Matching a string in a parenthesized block (regex help)

I must admit my knowledge is not advanced enough to understand the significance of the .= operator here. What is the reason behind adding strings to a string here? Not sure how to implement this solution.
  • Comment on Re^2: Matching a string in a parenthesized block (regex help)

Replies are listed 'Best First'.
Re^3: Matching a string in a parenthesized block (regex help)
by LanX (Saint) on Mar 06, 2021 at 15:43 UTC
    I already linked to the docs for the Flip-Flop operator

    Here an implementation

    Please note how ...

    • it avoids slurping the whole (potentially huge) file into RAM
    • it's self documenting (well better than one big regex)
    • you can now easily add more complicated tests when maintaining

    use strict; use warnings; my $section; my $hit; while (<DATA>) { my $start = /^ASDF \{\s*$/; #(2) my $end = /^\}\s*$/; if ($start .. $end) { $section .= $_; $hit = 1 if /foo_match/; } if ($end and $hit) { print $section; $section = $hit = ""; # reset (1) } } __DATA__ ASDF { tmp foo_match tmp } string2 { tmp } ASDF { tmp bar_match tmp }

    NB:

    • 1) you can also exit instead of resetting
    • 2) allowing potential "invisible" whitespace \s* at the end makes it more robust

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery