in reply to Parsing "=" separated output

Hi! I don't like putting too much brain into regexes, so I wrote a bit more code. But I think it's gonna be easier to maintain afterwards.

my $str = 'sometrash key1=value0 value1, value2 key2=value3 key3=value +4'; my @tokens; for my $token (split(" ", $str)) { if ($token =~ m/=/) { push @tokens, $token; } else { next unless @tokens; $tokens[-1] .= ' ' . $token; } } my %tokens = map { split("=", $_) } @tokens;

Replies are listed 'Best First'.
Re^2: Parsing "=" separated output
by Anonymous Monk on Aug 03, 2011 at 10:37 UTC
    #!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; Main( @ARGV ); exit( 0 ); sub Main { my $str = q[sometrash key1=value0 value1, value2 key2=value3 key3= +value4]; my @tokens = split /([^\s=]+=)/, $str; shift @tokens until $tokens[0] =~ /=$/; print Dumper( { @tokens } ); } __END__ $VAR1 = { 'key3=' => 'value4', 'key2=' => 'value3 ', 'key1=' => 'value0 value1, value2 ' };
      Probably better to stop looping when run out of tokens :)
      shift @tokens until not(@tokens) or $tokens[0] =~ /=$/;