use strict; use warnings; use autodie; $_ = '0004$ADAM0002*330004%19770004$BOB 0002*430004%1967'; my %fh; open $fh{'$'}, ">", "dollar.txt"; open $fh{'*'}, ">", "asterisk.txt"; open $fh{'%'}, ">", "percent.txt"; print {$fh{$2}} $3, "\n" while /([0-9]+)(.)((??{".{$1}"}))/g; __END__