in reply to Parsing a Log File

This could be done using Parse::RecDescent. For example, here is a simple, stripped-down grammar for part of a play. I used 'autotree' so you would get a parse tree automatically. You can either write code to work with the parse tree itself, or define your own actions for each grammar rule so that the play information can go into a hash for each player.
use strict; use Parse::RecDescent; use Data::Dumper; # ORL 13 Sauls kicked off 71 yards from the ORL30 my $grammar = q { <autotree> file : play(s) play : side number player action action : kick | run kick : 'kicked off' number 'yards from the' sideyard run : 'ran' number 'yards' side : /\w+/ player : /\w+/ number : /\d+/ sideyard : /\w+\d+/ }; my $parser = new Parse::RecDescent ($grammar); my $ret = $parser->file("ORL 13 Sauls kicked off 71 yards from the ORL +30"); print Data::Dumper->Dump([$ret], [qw(ret)]);