my @filters = ( \&eliminate_ws, \&do_something, \&do_something_else, \&etc ); # ... while (<$myfile>) { FILTERS: for my $filter (@filters) { # keep filtering until a filter says to stop. last FILTERS unless $filter->() } } sub eliminate_ws { s/\s*$// } # always returns true. # as opposed to: # sub eliminate_ws { s/\s+$//; 1 } # always returns true, even if s "failed" #### $ perl -e 'printf "%e\n",((1/334000)-(1/1211000))' 2.168248e-06