#!/usr/bin/perl -w use strict; 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( %hash, $y ); my $key = my $x = shift; while($y = shift){ if( $y eq '=>' ){ pop( @{$hash{$key}}); $key= $x; $y = shift; } push( @{$hash{$key}}, $y ); $x = $y; } return \%hash; }