use strict; use warnings; my @results = do { local $/ = ''; # paragraph mode map { my $p=$_; [ map { $p=~/$_ (\S+)/?$1:'UNDEF' } qw/TYPE CAUSE AFFECT/ ] } grep { /TYPE/ } ; }; print "@$_\n" for @results; __DATA__ // HEADER TAG // VERSION TAG TYPE VALUE1 EQUALS MAIN I am useless text CAUSE FAIL AFFECT ERROR ENDTYPE TYPE VALUE2 EQUALS MAIN I am useful test ENDTYPE TYPE VALUE3 EQUALS MAIN CAUSE DEGRADED ENDTYPE TYPE VALUE4 EQUALS MAIN AFFECT WARNING ENDTYPE