# chain_lines takes a list of coderefs # The first sub in the chain is called with no input; subsequent ones are called # with $_ set to the line from the previous sub; the iterator returns one line of # output from the last sub in the chain. If a sub yields undef, processing # restarts at the first sub. When the first sub yields undef, the iterator is done. my $i = chain_lines sub { <$in> }, sub { /^42/ ? $_ : undef }, # grep sub { join "\t", (split /\t/)[1,3,8] }; # all_lines expands the iterator into a list of lines sort all_lines($i);