use Data::Dumper; my @node; for my $file (glob('/ver1/ver2/ver3/node*')) { push(@node,[]); if(open(my $fh, '<', $file)) { while(my $line=<$fh>) { if($line=~/exceed/) { my $data=join('',(split(/\s+/,$line))[3,4]); $data=~y/|/ /; $data=(split(/\s+/,$line))[2]; push(@{$node[-1]},$data); } } close($fh); } else { warn("ERROR open $file ($!)\n"); } } print Dumper(\@node);