in reply to open annoyance
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
|
|---|