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; while ( $_ = scalar @f ? shift @f : <STDIN> ) { chomp; unshift(@f,"hi test test") if condition; }
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.my @f; { redo if $_ = shift @f || <STDIN>; }
In reply to Re: Manipulating STDIN
by Revelation
in thread Manipulating STDIN
by ChwanRen
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |