use Data::Dumper; use strict; use warnings; simple_call( animal => 'monkey', fish => 'tuna', insect => 'ant', insect => 'spider' ); ########################## sub simple_call { my %params; while(my($key, $value) = splice @_, 0, 2) { if (exists $params{$key}){ if (ref $params{$key} eq "ARRAY"){ push @{$params{$key}},$value; }else{ $params{$key} = [$params{$key},$value]; } }else{ $params{$key} = $value; } } print Dumper \%params; }