while(<>) { chomp; if ( /set\spolicy\sid\s(\d+)\s(from|name\s\"[^"]+\")?\sfrom/ ) { $id = $1; push ( @{ $id_policy{$id}}, $_ ); next; } push ( @{$id_policy{$id}}, $_ ) if $id } for my $id ( keys %id_policy ) { foreach (@{ $id_policy{$id} }) { if ( /set\spolicy\sid\s(\d+)\s(from|name\s\"[^"]+\"\sfrom)\s\"Untrust\"\sto\s"DMZ/ ) { # ????????? } } }