Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^2: getting a regex to return an array of matches?

by rmexico (Novice)
on Feb 14, 2006 at 18:13 UTC ( #530186=note: print w/ replies, xml ) Need Help??


in reply to Re: getting a regex to return an array of matches?
in thread getting a regex to return an array of matches?

i did try this, which doesn't work:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use diagnostics; undef $/; my $file = "test.txt"; open INFILE, "<$file" or die "cant open file: $!\n"; my @arr = <INFILE>; close INFILE; foreach my $filepieces (@arr) { my @matches = $1 if ($filepieces =~ /alpha\|(.*?)\|/smg); if(@matches) { foreach my $match (@matches) { print "match: $match\n"; } } }
and the file:
alpha|beta|alpha|theta|alpha|gamma|alpha|episilon
that's just an example, splitting on the pipe isn't an option, b/c my real files to parse don't look like that


Comment on Re^2: getting a regex to return an array of matches?
Select or Download Code
Re^3: getting a regex to return an array of matches?
by ikegami (Pope) on Feb 14, 2006 at 18:20 UTC

    Never do
    my $var = ... if ...;,
    my $var = ... unless ...;,
    my $var = ... for ...;,
    my $var = ... foreach ...; or
    my $var = ... while ...;

    Split them into two statements, like
    my $var; $var = ... if ...;.

    Update: Well, this is bothering me. I can't remember why, and I can't find an example where the above fails.

    Update: diotalevi, which I believe has a knowledge of Perl guts, mentions: "my() has a runtime effect. You *always* (unless you're doing something freakish) want that to happen. The my $var STATEMENT-MODIFIER allows the runtime part of my() to potentially not happen." In other words, it sounds like doing any of the above leaves perl in an unstable state.

      not following here?
      my $var = $1 if ($filecontents =~ /SOME_REGEX(.*?)$/g); if($var) { ... proceed w/ usage of $var }
      why pre-declare, then use?
        Because my with a conditional is buggy (and makes no sense). In your case, the following will do nicely:
        my ($var) = $filecontents =~ /SOME_REGEX(.*?)$/g; if (defined $var) { ... proceed w/ usage of $var }
        Now the warning resides in perlsyn, and it says
        NOTE: The behaviour of a "my" statement modified with a statement modifier conditional or loop construct (e.g. "my $x if ...") is undefined. The value of the "my" variable may be "undef", any previously assigned value, or possibly anything else. Don't rely on it. Future versions of perl might do something different from the version of perl you try it out on. Here be dragons.
        So don't do that!! :)

        'my' buggy... and my $cache = undef if undef; hit upon that.

        MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
        I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
        ** The third rule of perl club is a statement of fact: pod is sexy.

Re^3: getting a regex to return an array of matches?
by tirwhan (Abbot) on Feb 14, 2006 at 18:25 UTC

    This will:

    #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use diagnostics; undef $/; my $text = <DATA>; my @matches; if (@matches = $text =~ /alpha\|([^|]+)\|/smg) { foreach my $match (@matches) { print "match: $match\n"; } } __DATA__ alpha|beta|alpha|theta|alpha|gamma|alpha|episilon

    Output:

    match: beta match: theta match: gamma

    Or you could dispense with loading data into the array at all (unless you need it for later):

    #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use diagnostics; undef $/; my $text = <DATA>; while ($text =~ /alpha\|([^|]+)\|/smg) { print "match: $1\n"; } __DATA__ alpha|beta|alpha|theta|alpha|gamma|alpha|episilon

    All dogma is stupid.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (10)
As of 2014-09-16 22:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (51 votes), past polls