ingydotnet / io-all-pm

All in One Perl IO
http://search.cpan.org/dist/IO-All/
38 stars 20 forks source link

IO::All won't create tempfile #24

Open frioux opened 10 years ago

frioux commented 10 years ago

dist: IO-All-0.31 perl: v5.8.3 built for i386-linux-thread-multi o/s : mikey.emperorlinux.com 2.4.24-emp_2424sw #1 Fri Feb 20 17:56:50 EST 2004 i686 i686 i386 GNU/Linux

I did try the Perlmonks first: http://perlmonks.org/?node=402395


I can't get what I'd consider proper behavior when creating temporary files with IO::All.

!/usr/bin/perl -w

use strict; use IO::All; my $temp_file = io('?'); "foo" > $temp_file;

During execution I get the following fatal error...

Can't call method "print" on an undefined value at /usr/lib/perl5/site +_perl/5.8.3/IO/All.pm line 618.

I believe I'm following the documentation correctly, so I would expect the file to be writable. However, I don't even think a temporary file is being created.

(imported from https://rt.cpan.org/Ticket/Display.html?id=8168)

haarg commented 10 years ago

The issue here is that the < overload will close an open file, then re-open it to print to it. Since temp files don't actually have filenames, this doesn't work. The problematic code is IO::All line 358:

    $_[1]->close if $_[1]->is_file and $_[1]->is_open;

It might be better to replace this with a seek and truncate.