use strict; use warnings; my $tell = tell DATA; while(){ if( /^(.*?):/ ) { my $client = $1; push @{$lines{$client}}, $tell; $triggered{$client}++ if /trigger/; } $tell = tell DATA; } print "Found triggers for ", join( ", ", keys %triggered ), ".\n"; for( keys %triggered ) { print "Log for client $_:\n"; for( @{$lines{$_}} ) { seek DATA, $_, 0; my $line = ; print "\t$line"; } } __DATA__ arthur: line 1 arthur: line 2 trigger ford: line 3 # some comment zaphod: line 4 zaphod: line 5 trigger arthur: line 6 ford: line 7