#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; print Dumper( kvkv( 'asdf=asdf blah=blah ra=rah' ) ); sub kvkv { my %foo; while( $_[0]=~ /([^=\s]+)=([^=\s]+)\s*/g ){ $foo{$1}=$2; } return \%foo; } __END__ $VAR1 = { 'blah' => 'blah', 'ra' => 'rah', 'asdf' => 'asdf' };