At 12:19 pm -0400 27/05/02, Chris Nandor wrote:
>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?

Somehow I missed Bart's note: hence the silence.

>Yes.
>
>However, two notes:
>
>* open() does *not* fail on a filename with spaces; it fails on a filename
>with leading or trailing spaces.

Right. Many folk put spaces at the beginning of folder names so that 
the Finder lists them more tidily. That is the most common problem?

>   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;

For the life of me, and please believe I am not being picky, I can't 
see the difference between the two. What am I missing?

>There are many solutions, one of which is three-arg open.  Another is to
>use sysread(), which is sometimes a pain.

Particularly if calls to 'sysread()' and 'read()' get inadvertently 
mixed on the same filehandle I believe.

>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.  :-)

Frankly a lot of problems would disappear would they not, if spaces 
in folder/file names were simply banned for ever to outer darkness?

Alan Fry

Reply via email to