sub btree { # I personally would much prefer hash reference(s) here my ( $disk , $workdir , $outFileName , $sep , $keyMap_aref , $verbose , $infile_aref , $indir , $outdir , $splitSize , $keyPos_aref , $outCol_aref ) = @_ ; ... # No need for "$pcode" & later "eval $pcode" # Use "$parse->($line)" as you already have my $parse = make_parse_code( $sep , $splitSize , $keyPos_aref ); ... } sub make_parse_code { my ($sep , $size , $items) = @_; return sub { my ($line) = @_; join $sep , ( (split /$sep/ , $line , $size)[@$items] ); }; }