in reply to Parsing named parameters

#!/usr/bin/perl my $line = <DATA>; chomp $line; my $options = {}; for (split /(?=\s\S+\s*=)/, $line) { my ($option, $value) = split /=/, $_; $option =~ s/^\s+//; $option =~ s/\s+$//; $options->{$option} = $value; } use Data::Dumper; print Dumper $options; __DATA__ option1 = value0 value1 value2 option3 =value3 value4 option2=value5 __END__ $VAR1 = { 'option1' => ' value0 value1 value2', 'option3' => 'value3 value4', 'option2' => 'value5' };
-sauoq
"My two cents aren't worth a dime.";

Replies are listed 'Best First'.
Re^2: Parsing named parameters
by sk (Curate) on Nov 07, 2005 at 03:32 UTC
    Thanks very much sauoq,

    Even though I can sort of read positive/negative-look-ahead regexs, I still haven't been able to exploit it effecitively in my code! Whenever I am stuck like this next time I should try out that type of solution :)

    Just for other people's benefit, I shall try to explain your solution. Please correct me if i am wrong

    Input: option1 = value0 value1 value2 option3 =value3 value4 option2=v +alue5 split /(?=\s\S+\s*=)/, $line
    Here the regex looks for positions where there is a space followed by more than one non-space char and then an =. When such a position is found, it splits on null char. Here, it will split right before option3 = (for the first time). We can also modify this regex slightly to make it -  /\s+(?=\S+\s*=)/.

    Thanks very much.

    Also thanks to QM and pg for their suggestions/solutions!

    cheers

    SK