$/ = "!\n"; while ( ) { chomp; if ( /^interface (.*)/ ) { if ( $1 eq 'Ethernet' ) { parse_ethernet( $_); } elsif ( $1 eq 'Gigabit' ) { parse_gigabit( $_); } } elsif ( /^system (.*)/ ) { # blah... } } sub parse_gigabit { my $chunk = shift; $chunk =~ tr/\n/ /; print "GIGABIT: $chunk\n"; } sub parse_ethernet { my $chunk = shift; $chunk =~ tr/\n/ /; print "ETHERNET: $chunk\n"; } __DATA__ ! interface Ethernet blah... blah... ! interface Gigabit blah... blah... ! interface Ethernet blah... !