run(open => './path/to/', do=> 'tell what to do', save => './path1/to'); #### sub run{ my ($self,%arg) = @_; if (defined $arg{open}){ $self->_open_it_and_run_it(open => $arg{open}); } } #### sub _open_it_and_run_it{ my ($self,%arg) = @_; open (IN, "<",$arg{open}) || die "$!"; while (){ ... } close IN: } #### run(open =>'./', ....); #### run(open =>'./dir/', ....);