#!/usr/bin/env perl use strict; use warnings; my $state = 0; sub change_state { my $state = shift; return 1 if $state == 0; return 0 if $state == 1; die "epic fail" } sub read_between_hs { my $line=shift; if ($line =~ /^(j|E|G)/) { print $line; } } while () { my $line = $_; $state = change_state($state) if ($line =~ /^h/); read_between_hs($line) if ($state); } __DATA__ h start printing x dontprintme a dontprintme G printme j printme E printme h stop printing j not between hs should not print E dont print me G dont print me h start printing definitely printable j ahh back to not being ignored G print E print e print -- just kidding h stop printing