Sandra Schlichting
Sandra Schlichting

Reputation: 25986

Different ways to test for $1 after regex?

Normally when I check if the regex succeeded I do

if ($var =~ /aaa(\d+)bbb(\d+)/) { # $1 and $2 should be defined now }

but I recall seeing a variation of this that seamed shorter. Perhaps it was only with one buffer.

Can anyone think or other ways to test if $1 after a successful regex?

Upvotes: 1

Views: 120

Answers (4)

Sandra Schlichting
Sandra Schlichting

Reputation: 25986

Reading both answers, I now recall that this was what I had seen

my $str = 'abc101abc';

$str =~ m/(\d+)/;
print $1 if $1;

print $1 if $str =~ m/(\d+)/;

Upvotes: 0

choroba
choroba

Reputation: 241828

You can avoid $1 and similar altogether:

if (my ($anum, $bnum) = $var =~ /aaa(\d+)bbb(\d+)/) {
    # Work with $anum and $bnum
}

Upvotes: 10

gaussblurinc
gaussblurinc

Reputation: 3682

never forget about

use strict;
use warnings;

I like plain syntax in Perl, but not in this way:

my $str = 'abc101abc';

$str =~ m/(\d+)/ and do {print $1;}

OR

$str =~ m/(\d+)/ and print $1;

OR

($str in $_, so $_ = $str;)

m/(\d+)/ and print $1;

BUT! TIMTOWTDI helps you to dream about your own style :)

I prefer old-if style.

Upvotes: 1

Mauritz Hansen
Mauritz Hansen

Reputation: 4774

The only shorter way that I can think of is if the match is on $_. So for instance:

for (@strings) {
   if (m/aaa(\d+)bbb(\d+)/) {
...

If the match succeeds then $1 and $2 will be populated.

Upvotes: 1

Related Questions