Oops, I misplaced the final closing parenthesis in the regex. But it doesn't seem to matter.
- - - - - #!/usr/bin/perl use warnings; use strict; use feature ":5.10"; # # $line, unless empty, should contain one or more white-space-separated # expressions of the form # FOO # or BAZ = BAR # # We need to parse them and set # $param{FOO} = 1 # default if value is omitted # $param{BAZ} = 'BAR' # # Valid input example: # MIN=2 MAX = 12 WEIGHTED TOTAL= 20 # $param{MIN} = '2' # $param{MAX} = '12' # $param{WEIGHTED} = 1 # $param{TOTAL} = '20' # my $line = 'min=2 max = 12 weighted total= 20'; $line = 'min=2 max, = 12 weighted total= 20'; say $line; my %param; if ( $line and ($line !~ s/ \G # Begin where prev. left off (?: # Either a parameter... (?: # Keyword clause: (\w+) # KEYWORD (captured $1) (?: # Value clause: \s* # = # equal sign \s* # (\w+) # VALUE (captured $2) )? # Value clause is optional ) \s* # eat up any trailing ws ) ### <-- moved | # ... or ... $ # End of line. / # use captured to set %param $param{uc $1} = ( $2 ? $2 : 1 ) if defined $1; /xeg ) ) { say "Syntax error: '$line'"; while (my ($x, $y) = each %param) {say "$x='$y'";} exit; } while (my ($x, $y) = each %param) {say "$x='$y'";} -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/