[EMAIL PROTECTED] wrote:
The issue:
I have a routine which builds a regex and 'knows' which paren matches to use
afterwords. For instance after a line such as:
use strict;
my $data =~ m/^(\S+)\s+((\S+\s+)?(\S+))$/;
the routine 'knows' it wants $1 and $4. Another pass through the regex will
be different and the variables might be $2 and $5 for that regex.
The needed variable numbers are in an array:
my @indexes;
@indexes = (1, 4); for the first example above and:
@indexes = (2, 5); for the second example above.
The question:
Is there a way to reference the built-in variables: $1, $2, ... in a
programmatic manner?
Something like:
@values;
push @values,${$_} foreach(@indexes);
which didn't work for me, but you get the idea.
That should work if @indexes contains numbers like
@indexes = (1, 3);
You'll also need to disable strict refs:
no strict 'refs';
However, another approach would be to do your regex match in list
context, and place the captured substrings into an array that you can index:
my @fields = $data =~ m/^(\S+)\s+((\S+\s+)?(\S+))$/;
@values = @[EMAIL PROTECTED];
Here the first match is at index 0 (i.e. $1 is @values[0])
Yes, I already thought of a subroutine with a big ifels ladder that hard codes
a test for $1, $2, ... but there has to be a more eloquent solution than this.
Thanks,
Don
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>