use strict; my %actionlist=( "you have to read the fourth line" => 4, "you have to read the second line" => 2 ); my $re = "(" . join ("|", keys %actionlist) . ")"; $re= qr|$re|; my $printthis = -1; while (){ if (my ($match) = /$re/){ $printthis = $actionlist{$match}; } $printthis-- == 0 and print; } __DATA__ first line second line third line you have to read the fourth line one two three four five six you have to read the second line one two three