search(simple => $stuff); search(normal => $stuff); search(extended => $stuff); #### use Carp; sub search($$) { my(%parameter); # Those parameters that you set my $mode = shift; if($mode eq 'simple') { # set parameters to simple ... } elsif($mode eq 'normal') { # set parameters to normal ... } elsif($mode eq 'extended') { # set parameters to extended ... } else { croak("mode '$mode' not supported"); } # Now just do your process_search ... }