#!C:\Perl\bin\perl use strict; use warnings; use Parse::RecDescent; use Data::Dumper; BEGIN{ $::RD_AUTOACTION=q{ [@item[1..$#item]] }; } my $grammar = q{ transaction: date|scan|date|connectPLU|date|connected|date|sending|date|sent|date|receiving|date|received|date|disconnected|date|display1|date|display2 date: /([Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]\\\\s+\\\\d{1,2}, \\\\d{4}) (\\\\d{1,2}:\\\\d{1,2}):\\\\d{1,2} ([AM|PM]) PCKLog log/ { print"$item[0]: $item[1] - $item[2]$item[3]\\\\n"; } | scan: /INFO: (\\\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}): recv - \\<\\d\\>(\\d+)\\<\\d\\>\\<\\d\\>\\<\\d\\>/ | connectPLU: /INFO: connect PLU server = \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}, PLU port = \\d+/ | connected: /INFO: connected\\.\\.\\.\\.\\./ | sending: /INFO: PLU send - \\d{1,2} bytes/ | sent: /INFO: PLU send - (\\d+)/ | receiving: /INFO: PLU recv - \\d{1,3} bytes/ | received: /INFO: PLU recv - \\<\\?xml .*\\?\\>\\\\(.*)\\<\\/desc\\>\\\\d{1,4}\\<\\/dept\\>\\(\\d{1,4})\\<\\/prc1\\>\\\\d{1,3}\\<\\/deal\\>\\<\\/PLU\\>/ | disconnected: /INFO: disconnected\\.\\.\\.\\.\\./ | display1: /INFO: (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}): send - .*/ | display2: /INFO: (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}): send - .*/ }; my $parser = new Parse::RecDescent($grammar) or die "Bad grammar: $!\\n"; my($INFILE,$storelog); my @log; $storelog = "SingleTrans.txt"; open $INFILE,"<",$storelog or die "Can't open $storelog: $!\\n"; @log=<$INFILE>; close $INFILE; my $tree=$parser->transaction(@log); print Dumper($tree);