##
if (data is available then) {
while (<>) {
}
}
else {
# do something else
}
##
##
my $stdin = IO::Select->new(\*STDIN);
open my $fh, '|-', $cmd or die $!;
if (@ARGV || $stdin->can_read(0)) {
while (<>) {
print {$fh} $_ or die $!;
}
}
else {
print {$fh} "\n" or die $!;
}
close $fh or die $!;
##
##
$ echo "text" | myprog
##
##
$ myprog <##
$ myprog afile