use Data::Dumper;
my $h = f(qw[ foo => zoo moo too
bar => car far
bar => zar tar
qux => mux ]);
print Dumper $h;
sub f {
$_='';my@v;{$_&&push@v,$_;$_=pop;redo until/=>/}
$k=pop;$h{$k}=[@v,@{$h{$k}}];@_?&f:\%h
}
####
sub f {
$_=my@v;{$_&&push@v,$_;$_=pop;/=>/||redo}
$k=pop;$h{$k}=[@v,@{$h{$k}}];@_?&f:\%h
}
####
sub f {
my@v;{$_=pop;/=>/||(push@v,$_)&&redo}
$k=pop;$h{$k}=[@v,@{$h{$k}}];@_?&f:\%h
}