use strict; use warnings; use feature qw{ say }; open my $inFH, q{<}, \ <<__EOD__ or die $!; Relay access denied (total: 5) 1 46.183.217.174 1 46.183.220.137 1 46.183.220.138 1 46.183.220.139 1 46.183.223.239 Sender address rejected: Access denied (total: 5) 1 47.183.223.239 1 219.38.243.204 1 183.29.8.198 1 183.29.9.133 1 183.29.9.135 Relay access denied (total: 8) 1 218.38.243.204 1 185.29.8.198 1 185.29.9.133 1 185.29.9.135 1 46.183.217.162 1 46.183.217.165 1 46.183.217.169 1 91.236.75.169 __EOD__ my @rad; my @sad; my $raSwitch; while ( <$inFH> ) { if ( m{\s+\d+\s+(\S+)} ) { push @{ $raSwitch }, $1; } elsif ( m{Relay access denied} ) { $raSwitch = \ @rad; } elsif ( m{Sender address rejected} ) { $raSwitch = \ @sad; } else { warn qq{Line not recognised: $_}; } } say q{Relay access denied:}; say qq{ $_} for @rad; say q{Sender address rejected:}; say qq{ $_} for @sad; #### Relay access denied: 46.183.217.174 46.183.220.137 46.183.220.138 46.183.220.139 46.183.223.239 218.38.243.204 185.29.8.198 185.29.9.133 185.29.9.135 46.183.217.162 46.183.217.165 46.183.217.169 91.236.75.169 Sender address rejected: 47.183.223.239 219.38.243.204 183.29.8.198 183.29.9.133 183.29.9.135