in reply to eval function

This is untested, and I'm not a shell string guru, but maybe you are looking just to quiet the output of the command? Maybe try moving the /dev/null to the other side of the pipe
#untested open(IN, "gzip -dc file.gz 2 > /dev/null | "); #or open(IN, "gzip -dc file.gz 2>&1 > /dev/null | ");

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh