use warnings; use strict; test1(arg1=>'A1',arg3=>'A3',arg4=>'A4'); test1(arg1=>'B1',arg2=>'',arg3=>'B3',arg4=>'B4'); sub test1 { my %def = (arg1 => 'A1', arg2 => 'A2', arg3 => 'A3', arg4 => 'A4'); my %args = (%def, @_); (keys %def != keys %args) and die "Invalid argument"; local $, = ' '; print %args,"\n"; } #### arg2 A2 arg1 A1 arg4 A4 arg3 A3 arg2 arg1 B1 arg4 B4 arg3 B3