Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Cross platform compatability Part 1: Shells and Files

by quidity (Pilgrim)
on Jan 21, 2001 at 19:21 UTC ( #53331=note: print w/ replies, xml ) Need Help??


in reply to Cross platform compatability Part 1: Shells and Files

except that it breaks DOS machines.
DOS/Windows coders can get their revenge by using

open FH "C:\temp";

That would be revenge indeed, creating a program which will run nowhere, not even on windows. On seeing this code perl turns it into:

open FH 'C:{TAB}emp';

Which is unlikely to be the file you wanted to open. Always, always, always, use '/' as a directory seperator, it works all over the place. In fact, your first versuion:

open (FH, ">/temp/tempfile"); print FH $temporary_data;

will work perfectly well, assuming 'C:\temp\tempfile' exists, but you didn't check the sucess of the open call so you'll never know.


Comment on Re: Cross platform compatability Part 1: Shells and Files
Select or Download Code
Re: Re: Cross platform compatability Part 1: Shells and Files
by jepri (Parson) on Jan 21, 2001 at 19:56 UTC
    Excellent - I see you spotted my deliberate mistake :) If you put single quotes around it though, it works fine:
    open FH, '>c:\temp\tempfile';

    the extra comma and greater-than sign help too.

    The main point still stands - hard coding filenames through your code is not a good idea. I don't know whether it is such a great idea to "Always, always, always, use '/' as a directory separator" or not. I feel it's fine to use whichever directory separator is appropriate for your filing system, just don't hard-code it.

    I'm not checking for errors or the like, because I was pitching the article at perl programmers who are competent, but who may not have programmed on more than one platform. As such I would be expecting them to be doing all sorts of neat stuff, but perhaps overlooking basic portability issues because they've never needed to address them before.

    ____________________
    Jeremy
    I didn't believe in evil until I dated it.

Re: Re: Cross platform compatability Part 1: Shells and Files
by chipmunk (Parson) on Jan 21, 2001 at 21:46 UTC
    Always, always, always, use '/' as a directory seperator, it works all over the place.

    Unless, of course, you're on a Mac (where the directory separator is ':'), or some other operating system with a different directory separator. :)

      Unless, of course, you're on a Mac (where the directory separator is ':'), or some other operating system with a different directory separator. :)

      If you're really worried about the directory separator, do this:

      $dir_separator='/'; open BLARG, "$dir_name$dir_separator$file_name";

      I can't really explain why, but sticking directory separators in a file name makes me cringe. I guess it's because the separator is not a part of the file name.

      There, I guess I did explain why.

        Sorry, not all platforms even use directory separators in that manner. Take a look at File::Spec for the proper way to do this portably.

                - tye (but my friends call me "Tye")

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://53331]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (15)
As of 2014-10-23 19:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (128 votes), past polls