use strict; use warnings; use Data::Dumper; use IO::File; print qq{Files to read\n}; my @dataFiles = glob q{spw592341.data*}; print qq{ $_\n} for @dataFiles; print qq{\n}; my $rhFiles = {}; foreach my $file (@dataFiles) { openFile($file); getLine($file); } showData(q{After reading first line}); foreach my $file (@dataFiles) { getLine($file); } showData(q{All files read again}); getLine($dataFiles[2]); showData(q{Read third file in list}); getLine(q{spw592341.dataD}); showData(q{Read spw592341.dataD}); foreach my $file (@dataFiles) { closeFile($file); } showData(q{After closing all files}); sub closeFile { my $file = shift; $rhFiles->{$file}->{handle}->close() or die qq{close: $file: $!\n}; delete $rhFiles->{$file}->{handle}; } sub getLine { my $file = shift; $rhFiles->{$file}->{buffer} = $rhFiles->{$file}->{handle}->getline(); chomp $rhFiles->{$file}->{buffer}; } sub openFile { my $file = shift; my $fh = IO::File->new($file, O_RDONLY) or die qq{open: $file: $!\n}; $rhFiles->{$file}->{handle} = $fh; } sub showData { my $msg = shift; print qq{\n$msg\n}; my $dd = Data::Dumper->new( [$rhFiles], [qw{rhFiles}])->Indent(1); print $dd->Dumpxs(); }