This is still only a one-shot deal. <STDIN>
now immediately returns an EOF (since we're reading from /dev/null now) as will any subsequent read from <NEWIN>
(since we've read everything from what was once STDIN). We're not gaining anything here, in other words. He needs his in-house stuff to parse STDIN *as well* as CGI.pm. Both of them are written to read from STDIN, and only the first will succeed.
If this were a normal file handle, we could seek(STDIN, 0, 0) to return it to a sane, starting state, but you can't do this with STDIN, because it's actually more like a pipe than a file.