sub process_files { my ($function, $parm, $message, $extension, @list) = @_; ... #### sub process_files { my ( $SubArgs ) = @_; my $function = $SubArgs->{ function } my $message = $SubArgs->{ message } my $parm = $SubArgs->{ parm } || ""; # If no parameter, default to "". my $extension = $SubArgs->{ extension }; my @list = @{ $SubArgs->{ list } }; ... #### foreach my $file (@list) { my $Newfile = substr($file, 0, 2); $Newfile = $Newfile . $extension; print "($function) $message $file to $Newfile\n"; @args = ("$function", "$parm", "$Newfile", "$file"); system(@args) == 0 or die "system @args failed: $?"; push @returnlist, $Newfile; } #### # rename files to 01.mp3, 02.mp3, etc. my @mp3list = process_files( { function => "mv", message => "renaming", extension => "\.mp3", list => @list } ); # call mpg123 to convert .mp3 to .wav my @wavlist = process_files( { function => "mpg123", param => "-qw", message => "converting", extension => "\.wav", list => @mp3list } ); # call sox to convert each .wav to .cdr my @cdrlist = process_files( { function => "sox", message => "converting", extension => "\.cdr", list => @wavlist } );