#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $file='logs.txt'; my @data; open(my $fh, '<', $file) or die("error open $file ($!)\n"); while(my $line=<$fh>) { if($line=~/([\d.]+) - - \[(.+?)\] "(.+?)" (\d+) (\d+) "(.+?)" "(.+?)"/) { push(@data,{ ip => $1, time => $2, request => $3, result => $4, filesize => $5, referer => $6, useragent=> $7, }); } } close($fh); my $starttime=$data[0]->{time}; my $endtime=$data[-1]->{time}; print Dumper(\@data);