in reply to Manipulating STDIN

I don't know if this won't work for some reason, but why not:
my @f; while ( $_ = scalar @f ? shift @f : <STDIN> ) { chomp; unshift(@f,"hi test test") if condition; }
If you won't be shifting '0' or '', then even  $_ = shift @f || <STDIN> works. Both solutions are simpler than tie()-ing STDIN; just replace reads from STDIN to  shift @f || <STDIN> inside the loop for seamless transition. Becase I'm a fan of using a block, instead of while syntax, with longer conditons and assignments, I'll also give you an alternative control structure:
my @f; { redo if $_ = shift @f || <STDIN>; }
If you're only reading from STDIN at the beggining, or don't mind copying and pasting a bit, then both solutions are strong. They mean one less module to debug, and one less layer of complexity in your code. It also gives a speed bonus over tie()-ing. If you _must_ tie to *STDIN, gmpassos provides an elegant solution. I feel like that's an unnecessary convolution, though.

Gyan Kapur
Untested

Replies are listed 'Best First'.
A reply falls below the community's threshold of quality. You may see it by logging in.