On Mon, Mar 10, 2003 at 12:24:51AM +0000, Richard Smith wrote:

> 65: $text =~ s{ <!--field--> ( .*? ) <!--end--> }
> 66:       { &selection( $1 ) }gsex;
> 
> ..
> 
> 83:           sub selection {
> 84:
> 85:                   my ( $name, $checked );
> 86:                   my $text = shift;
> 87:                   my $modified_text;
> 88:
> 89:                   for  ( split /\n/, $text ) {
> 90:     
> 91:                           {
> 92:                           m/name\s*=\s*"*(\w+)"*/;
> 93:                           $1 and $name = $1;
> 94:                           }

> The problem I seem to be having is on line 92/93. If the RE matches a
> value for name='string", then I want that string to be stored in the
> variable $name. If no match is found, I want the previous value of $name
> to persist.
> 
> However, it seems that if the pattern on line 92 doesn't match, then
> $name inherits the value from the instance of $1 generated in the RE on
> line 66. I have tried enclosing the second RE in braces (as shown), but
> the previous value of $1 still seems to persist.

$1 et al. contain the values from the last *successfully matched* regular
expression.  Thus, if the regex on line 92 does not match, $1 will still
have its value from line 65.

I would suggest writing lines 92 and 93 like this:

m/name\s*=\s*"?(\w+)"?/ and $name = $1;


Ronald

Reply via email to