while( ) { my @m= m{ ^\s* ( \w+ | '(?:\\.|[^\\']+)*' | "(?:\\.|[^\\"]+)*" ) \s* => \s* ( \w+ | '(?:\\.|[^\\']+)*' | "(?:\\.|[^\\"]+)*" ) \s*,?\s*$ }x; print "(", join("|",@m), $/; } __END__ key => 44, "key" => "fun. \"yes\" 'fun'", 'key' => 'yahoo\' "fun"'