in reply to Printing with Indirect FileHandles

update: revised to recognize the evidence of your last example.

print says print only prints $_ if neither a filehandle nor an argument list is provided, except that your last example demonstrates that it does not behave exactly as print says it does.

You could use the following:

use strict; use warnings; open( my $output, '>', '/tmp/output.txt' ) or die "Error: Cannot open the file - $!\n"; open( my $input, '<', '/tmp/input.txt' ) or die "Error: Cannot open the file - $!\n"; select $output; print while (<$input>); ## This is were the problem is. close( $input ); close( $output );

Replies are listed 'Best First'.
Re^2: Printing with Indirect FileHandles
by ikegami (Patriarch) on Aug 26, 2009 at 00:54 UTC

    except that your last example demonstrates that it does not behave exactly as print says it does.

    How so?

    In print {$output} $_, nothing is omitted, so what is specified to print is printed to the specified handle.

    In print $output $_, nothing is omitted, so what is specified to print is printed to the specified handle.

    In print $output, the file handle is omitted, so $output is printed to the currently selected handle.

    And the first, print {$output}, is not one of the valid forms.

      In print OUTPUT while (<$input>); a file handle is given but no list. print doesn't even admit in the synopsis that such a case is possible and it says:

      If LIST is also omitted, prints $_ to the currently selected output channel.

      My emphasis.

        oh, I missed that one.
      Thanks. And what is the explanation as to why print OUTPUT works?