#!/usr/bin/perl
use strict;
use warnings;
$_ = "this that some other foo bar baz";
if (/(this)\s*(that)\s*(some)\s*(other)\s*(foo)\s*(bar)\s*(baz)/) {
my ($this, $that, $some, $other, $foo, $bar, $baz) = ($1 .. $+);
print "$this, $that, $some, $other, $foo, $bar, $baz\n";
}
__END__
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
Use of uninitialized value in concatenation (.) or string at
, , , , , ,
What does work is:
#!/usr/bin/perl
use strict;
use warnings;
$_ = "this that some other foo bar baz";
if (/(this)\s*(that)\s*(some)\s*(other)\s*(foo)\s*(bar)\s*(baz)/) {
my ($this, $that, $some, $other, $foo, $bar, $baz) =
map {;no strict 'refs'; $$_} 1 .. $#-;
print "$this, $that, $some, $other, $foo, $bar, $baz\n";
}
__END__
this, that, some, other, foo, bar, baz
A trick I've been using for quite a long time. ($#+ instead of $#- works as well). |