#!usr/bin/perl use strict; use warnings; use Data::Dumper; use File::Find::Rule; # use Benchmark qw(:all) ; # WindowsOS # use Benchmark::Forking qw( timethese cmpthese ); # LinuxOS sub get_files { my @dirs = ('.'); my $level = shift // 2; my @files = File::Find::Rule->file() ->name('*.out') ->maxdepth($level) ->in(@dirs); return @files; } my @files = get_files(); # print Dumper \@files if @files; # open files and load them into an array my %HoA; foreach my $path_to_file (@files) { open my $fh, '<', $path_to_file; chomp(my @lines = <$fh>); splice @lines, 1, 1; $HoA{$path_to_file} = \@lines; close $fh; } print Dumper \%HoA; __END__ $ perl test.pl $VAR1 = { 'mySubDir/molec1-cluster2.out' => [ 'This is a sample line 1 file 2', 'This is a sample line 3 file 2' ], 'mySubDir/molec1-cluster1.out' => [ 'This is a sample line 1 file 1', 'This is a sample line 3 file 1' ] }; # file 1 $ cat mySubDir/molec1-cluster1.out This is a sample line 1 file 1 This is a sample line 2 (to be skipped) file 1 This is a sample line 3 file 1 # file 2 $ cat mySubDir/molec1-cluster2.out This is a sample line 1 file 2 This is a sample line 2 (to be skipped) file 2 This is a sample line 3 file 2