Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

convert windows path

by marauder (Novice)
on Nov 06, 2001 at 13:58 UTC ( #123539=perlquestion: print w/replies, xml ) Need Help??

marauder has asked for the wisdom of the Perl Monks concerning the following question:

i am making a cgi upload script which gets a file handle from a form parameter. how do i convert the slashes in the parameter from \ to /? that is \\pcname\share\dir\filename.ext to //pcname/share/dir/filename.ext. thanks in advance for any help.

Replies are listed 'Best First'.
Re: convert windows path
by Tyke (Pilgrim) on Nov 06, 2001 at 14:12 UTC
    Try $var =~ tr!\\!/!;

    But if you're using ActiveState Perl then be aware that the built-in operators and functions understand slashes in all directions anyway.

      $var =~ tr!\\!/! didn't work - this just split out the \ slashes. the problem seems to be that the forward slashes in the variable are not interpreted as such so c:\dir would not work whereas we know c:\\dir would be interpreted as c:\dir and would work. i think i need to find a way of returning the path from my html form with \\ instead of \ each time. i wonder if cgi.pm has an ability to convert paths?
        If I'm right in my guess about what you're trying to do, then the answer is "yes, CGI.pm does do it all for you". That's to say, if you're dealing with form input from a form that has a tag like <INPUT TYPE="FILE" NAME="FILENAME"> then if you do
        my $fh = param('FILENAME'); while (<$fh>) { do_stuff_with($_); # manipulate the file line by line }
        CGI.pm will deal with the path in the appropriate way - at least, that's been my experience when receiving input from browsers on Windows systems and processing it on a Linux system.

        (BTW you might want to use the upload() method, but as this comes only with later versions of CGI.pm I mention the old-fashioned way, in case you are stuck with an annoying ISP.)

        CGI.pm does the thinking so you can spend more time drinking beer :)

        § George Sherston
        I'm not sure I understand the problem.
        What does your variable really contain? What is the length of c:\dir? 5 or 6? Can you post a snippet?

        If you need a way to escape special characters you can use the quotemeta built-in.

        I don't use CGI so I'm afraid that I can't help you there.

      Didn't you want to say: $var =~ tr!\\!/!s;

      Update ...oops, apparently not what was wanted. It's just that in my unix eye the double slash at the beginning looks so ugly.

        That would change \\machine\dir\file to /machine/dir/file which wasn't what the original poster wanted (the way I read the question anyway).

        Update Sorry jeroenes must've posted at the same moment. BTW, my first take was to agree with you. I hadn't even considered adding it. It was only while replying that I saw it wouldn't work.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://123539]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2023-09-28 10:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?