David Gray wrote: > > > Thank you, John. This code does exactly what I want. Problem > > is, I only understand about 30% of what's going on. I can > > figure out the use of the hash, some of the pattern matching > > & $1/$2. But can someone elaborate on: > > > > @keys{ qw/P ST U SL D/ } = \( $Proc, $Start, $Url, $Sleep, $Drive ); > > This is a shortcut for defining the values of a hash -- it creates > $keys{P} == $Proc, $keys{ST} == $Start, etc.
$keys{P} = \$Proc, $keys{ST} = \$Start, etc. > > /(\S+)=(.+?)(?=\s+\S+=|\z)/g > ^^^ ^^^ ^^^ ^^^^ > 1 2 3 4 > > 1) match one or more non-whitespace characters, followed by a literal > '=' > > 2) match one or more anythings, non-greedy > > 3) a "zero-width positive look-ahead assertion" (check out perldoc > perlre for more info on this, basically checks that a pattern exists > ahead of what you're currently examining in your regex) > > 4) this part doesn't make sense to me -- I would think it should be: > > (?=\s+=|\z) > > instead... I see no cases where there would be any whitespace after your > parameter list is finished, and between, for example, 'ST' and '=', > which is what this sequence allows for... >From the OP's post, the data is: q[P=IcwRcsm D=D: SL=20 ST=d:\icw\rcsm\StartSv.bat Parm1 Parm2 U=http://uslv...]; /(\S+)=(.+?)(?=\s+\S+=|\z)/g will match: (P)=(IcwRcsm)(?= D=) (D)=(D:)(?= SL=) (SL)=(20)(?= ST=) (ST)=(d:\icw\rcsm\StartSv.bat Parm1 Parm2)(?= U=) And finally: (U)=(http://uslv...)(?=\z) The (?=\s+\S+=) pattern ensures that the data captured in $2 has no trailing whitespace. > > ${$keys{uc $1}} = $2; > > First of all, $1 and $2 are automatic variables set by backreferences in > the previously evaluated regular expression, the one discussed above. > The 'uc $1' part makes sure that whatever characters are in $1 are > uppercase. It's then read as: take the variable named $keys{uc $1} and > set it to $2. Check out perldoc perlref for more information about this, > especially the section titled: 'Using References'. > > After the code is executed, you'd end up with: > > $P == 'IcwRcsm D=D: ' > $SL == '20 ST=d:\icw\rcsm\StartSv.bat' Wrong. Run the code I posted and see for yourself. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]