Because you've switched BOIN and BOOUT.
You need to write to BOOUT and read from BOIN--you were
doing the opposite. It should read:
#!/usr/bin/perl -w
use strict;
use IPC::Open2;
print open2(\*BOIN, \*BOOUT, "cat");
print BOOUT "proclist\n";
print BOOUT "quit\n";
close BOOUT;
while (<BOIN>) {
print;
}
close BOIN;
If you'd had warnings on in your original, you would
have received this warning:
Filehandle main::BOIN opened only for input at foo.pl line 8.
Filehandle main::BOIN opened only for input at foo.pl line 9.
By the way, as
perlipc warns, watch out for Unix buffering.
In this case (using
cat) you might want to use
the -u flag for unbuffered output. In your case, it doesn't
matter much, since you close the output filehandle. But
in general, it's something to think about.