use strict; use warnings; #### use autodie; #### $data_type_number=@data_type_array; for($i=0;$i<$data_type_number;$i++) { ... } #### for (0 .. $#data_type_array) { ... } #### #!/usr/bin/env perl -l use strict; use warnings; use autodie; use constant { FILENAME => 0, FILEHANDLE => 1, }; my %file = ( animal => [ 'pm_1155794_animal.txt' ], plant => [ 'pm_1155794_plant.txt' ], goods => [ 'pm_1155794_goods.txt' ], ); while () { my ($item, $type) = split; print { get_fh($type) } $item; } sub get_fh { my $type = shift; open $file{$type}[FILEHANDLE], '>', $file{$type}[FILENAME] unless defined $file{$type}[FILEHANDLE]; return $file{$type}[FILEHANDLE]; } __DATA__ cat animal apple plant strawberry plant muffler goods #### $ cat pm_1155794_animal.txt cat $ cat pm_1155794_plant.txt apple strawberry $ cat pm_1155794_goods.txt muffler