Interestingly enough, if you change where you are specifying the IO parameters to the open command, it seems to work for all three styles of open commands.
Update: Whoops, edit to restore truncate function, still works though.
Note this was tested under Windows so I changed the cat command, but it is otherwise the same.
use strict; use warnings FATAL => 'all'; my @open = ( q(open( my $fh, '>', @_ )), q(open( my $fh, '>', @_[ 0..$#_ ] )), q(open( my $fh, '>', shift, @_ )), ); my $filename = 'hello_world'; my $test_string = "Hello, world!\n"; for my $prepare ( \&remove, \&truncate ) { for my $o ( @open ) { my $sub = eval "sub { $o or die \$!; return \$fh }" or die 'eval failed'; $prepare->( $filename ); # remove or truncate eval { my $fh = $sub->($filename ); print $fh $test_string; close $fh; my $op = ($^O =~/MSWin/) ? 'type' : 'cat'; $test_string eq `$op $filename` or die "incorrect contents\n"; }; printf "%-33s: %s", $o, $@ ? $@ : "OK\n"; } print "\n"; } sub remove { unlink shift; } sub truncate { open my $fh, '>', shift or die $!; return; } __END__ open( my $fh, '>', @_ ) : OK open( my $fh, '>', @_[ 0..$#_ ] ): OK open( my $fh, '>', shift, @_ ) : OK open( my $fh, '>', @_ ) : OK open( my $fh, '>', @_[ 0..$#_ ] ): OK open( my $fh, '>', shift, @_ ) : OK
In reply to Re: open annoyance
by thundergnat
in thread open annoyance
by tlm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |