Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^2: Matching a string in a parenthesized block (regex help)

by maxamillionk (Acolyte)
on Mar 06, 2021 at 14:23 UTC ( [id://11129191]=note: print w/replies, xml ) Need Help??


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.

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11129191]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2024-03-29 13:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found