use strict; my $config = '/var/www/cgi-bin/prt.cfg'; open( FH, '<', $config ) or die "Cannot open '$config': $!\n"; my @servers; my ($in_server, @temp); while ( ) { next if /^#|\s/; chomp; if (//i) { die "Entering server when in server\n" if $in_server; $in_server = 1; } elsif (/<\/server.*?>/) { die "Entering server when in server\n" if !$in_server; $in_server = 0; push @servers, [ @temp ]; @temp = (); } elsif ( $in_server ) { push @temp, $_; } } close FH; use Data::Dumper; print Dumper( \@servers );