Hi Deb. Let me put you out of your misery. It's a shame because you were soooo close!
Deb wrote: > > Here's the modified script. I made some changes, as suggested, but > there > was no change in the output. I've included my entire script. My > head is getting mighty flat from banging it against the wall. Oh, > and I added "use warnings;" and I haven't got a clue what I need to > do to fix those. <sigh> [snip] > #!/bin/perl -w > > use warnings; > use strict; > my %cmdLine; > my %newHash; > my $DBG = 1; > my ($onceMore, $opt, $arg); > > while (<DATA>) { > chomp; > > my ($adx, $rest) = (split(/:/,$_)); > if ($DBG) {print "\$adx=\t<$adx>\n\$rest=\t<$rest>\n";} > > while (defined ($rest) && $rest ne "") { There's no need for this conditional. If $rest is undefined it will evaluate as false, so while ($rest) will do. > my ($opt, $arg, $newRest) = ($rest =~ /\s*([\-a-z]*)\s+([^ ]*)\s+(.*)/); Here's your problem: the regex is wrong. It may help to use the /x modifier so that you can use whitespace as layout instead of meaning literal characters. / \s* ([\-a-z]*) \s+ ([^ ]*) \s+ (.*) /x Now you've got your $opt being a list of zero (!) or more lower-case alphas or hyphens. How about one hyphen followed by a single small alpha: (-[a-z]) You've got at least one space after the option. If you're sticking to single-character options then none would do: \s* Then you want to grab all non-space character for the argument: (\S+) followed by the rest of the string for $newRest: (.*) Assembling these, you get: / \s* (-[a-z]) \s* (\S+) (.*) /x which handles all of the options correctly so you no longer need the # parse the final tuple... block below. > $rest = $newRest; > $cmdLine{$opt} = $arg; > } > > # parse the final tuple... > my ($opt, $arg, $newRest) = ($rest =~ /\s*([\-a-z]*)\s+([^ > ]*)\s+(.*)/); $cmdLine{$opt} = $arg; And that's all, it now works. Well done you! Cheers, Rob > # Build out the data structure > my $masterKey = $cmdLine{'-x'}; > > foreach my $opt (keys %cmdLine) { > $newHash{$masterKey}{$opt} = $cmdLine{$opt}; > } > } > > foreach my $masterKey (sort keys %newHash) { > print "$masterKey\n"; > foreach my $opt (sort keys %{$newHash{$masterKey}}) { > print "\t$opt\t" . $newHash{$masterKey}{$opt} . "\n"; > } > } > > > __DATA__ > ten-me-900: -r timbu -x me-900 -h ten-me-900 > hidit: -r tenbu -x networks-users -h hidit > postal: -x direct -h postal > pickit: -h pickit -x uncrp -r oakd -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]