Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
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 wandering the Monastery: (6)
As of 2015-07-02 00:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls