$entry[6] =~ m{^http://.*v1=(.*)&v2=(.*)&v3=.*$} or do { warn "Skipping unparseable line $. :\n" . " http_code: $http_code\n" . " url: $url\n" . " edate[0]: $edate[0]\n" . " edate[1]: $edate[1]\n" . " edate[2]: $edate[2]\n" . " edate[3]: $edate[3]\n" ; next; }; my $url = "$1$2"; $STATUS{$http_code}{$url}{$edate[0]}{$edate[1]}{$edate[2]}{$edate[3]}++; #### my $url = ( $entry[6] =~ m{^http://.*v1=(.*)&v2=(.*)&v3=.*$} ) ? "$1$2" : undef ; # ... More parsing code can go here. if ( grep {not defined $_} ( $http_code, $url, @edate[0..3] ) ) { warn "Skipping unparseable line $. :\n"; # ... and dump vars. next; } $STATUS{$http_code}{$url}{$edate[0]}{$edate[1]}{$edate[2]}{$edate[3]}++;