use warnings; use strict; my $myvar; my $take = sub { return unless defined $myvar; chomp($myvar); print "<<$myvar>>\n"; undef $myvar; }; while () { if (my ($k,$v) = /^(\w+)=(.*)$/s) { $take->(); $myvar = $v if $k eq 'my_variable'; } elsif (/^\[.+\]$/) { $take->(); } else { $myvar .= $_ if defined $myvar; } } $take->(); __DATA__ unwanted_line1=blabla unwanted_line2=blabla my_variable=important_content_section1 important_content_section2 important_content_section3 unwanted_line3=blabla unwanted_line4=blabla unwanted_line5=blabla my_variable=important_content_section4 important_content_section5 important_content_section6 [stepxyz#xxxx] unwanted_content1 unwanted_line6=blabla my_variable=important_content_section7 unwanted_line7=blabla my_variable=important_content_section8 my_variable=important_content_section9 unwanted_line8=blabla #### <> <> <> <> <>