Perl open updating file in place
(Duping a filehandle does not take into account any existing contents of IO buffers.) If you use the three-argument form, then you can pass either a number, the name of a filehandle, or the normal "reference to a glob".Here is a script that saves, redirects, and restores is a file descriptor number or a filehandle, then Perl will do an equivalent of C's fdopen(3) of that file descriptor (and not call dup(2)); this is more parsimonious of file descriptors. On many Unix systems, fdopen(3) fails when file descriptors exceed a certain value, typically 255.
(You are not allowed to open to a command that pipes both in and out, but see IPC:: Open2, IPC:: Open3, and Bidirectional Communication with Another Process in perlipc for alternatives.) In the form of pipe opens taking three or more arguments, if LIST is specified (extra arguments after the command name) then LIST becomes arguments to the command invoked if the platform supports it.
Note that if layers are specified in the three-argument form, then default layers stored in $ (see perlvar; usually set by the open pragma or the switch ) are ignored.
Those layers will also be ignored if you specify a colon with no name following it.
For the sake of portability it is a good idea always to use it when appropriate, and never to use it when it isn't appropriate.
Also, people can set their I/O to be by default UTF8-encoded Unicode, not bytes.