At 15:49 +0200 2002.05.27, Bart Lateur wrote: >Sorry for the late reply. Actually, no, I'm not sorry, I've been away >for a few weeks, so it's actually not my fault. :-) > >On Mon, 13 May 2002 13:04:43 +0200, Axel Rose wrote: > >>At 14:37 Uhr +0100 06.05.2002, Alan Fry wrote: >>>open(IN, $f); >> >>Problem 1: >>open() failes if a filename contains spaces. This is a very >>common problem. Even Net::FTP didn't work. >>Everybody opening files from the Desktop has to make this >>experience. > >Then use the three argument open(). It's been added to Perl in order to >solve this very problem, for one. It's rather new, I'm pretty sure it >wasn't in perl 5.004, but it *is* available in 5.6, so with the newest >MacPerl, you should be able to use it. > >The way it works, is that instead of using a combined string with file >name and opening mode, you now have them in separate arguments: > > open(IN, "<", $f); > >Simple, isn't it?
Yes. However, two notes: * open() does *not* fail on a filename with spaces; it fails on a filename with leading or trailing spaces. This works fine, with embedded spaces: my $f = "Bourque:Desktop Folder:file.txt"; open F, $f or die $!; print scalar readline F; This does not: my $f = "Bourque:Desktop Folder:file.txt "; open F, $f or die $!; print scalar readline F; There are many solutions, one of which is three-arg open. Another is to use sysread(), which is sometimes a pain. The third is to specify your open sign ('>', '<', etc.) and add a trailing null: my $f = "Bourque:Desktop Folder:file.txt "; open F, '<' . $f . "\0" or die $!; print scalar readline F; The greater danger with C< open F, $f > is that the filename might begin with a ">" or somesuch. Both three-arg open, and the method above with "\0", solve both problems; but the latter method works in any version of perl. I am not a big fan of three-arg open, but I have to admit it looks a lot nicer. :-) -- Chris Nandor [EMAIL PROTECTED] http://pudge.net/ Open Source Development Network [EMAIL PROTECTED] http://osdn.com/