http://www.perlmonks.org?node_id=890792


in reply to Failure of catfile on Windows 7

In Windows, \\foo\go\do would generally be seen as a UNC path, where foo is the server name. Is foo a server name? Or is it a directory at root level?

Also, have you tried File::Spec::Win32::canonpath and File::Spec::Win32::catpath?

--marmot

Replies are listed 'Best First'.
Re^2: Failure of catfile on Windows 7
by ikegami (Patriarch) on Mar 01, 2011 at 18:50 UTC
    File::Spec has no way to know that «\foo\go» on the current drive maps to «\» on share «\\foo\go», so I don't see how you think canonpath and catpath can help.

      Well, you never know when you've got incomplete information (such as what version of File::Spec the OP is using). Based on the code he provided, I can't imagine why the code would change only the first part of the path to "\\". So I asked.

      I'm looking at the code the OP ref'd. It's in a sub called _canon_cat that is referenced constantly throughout the module. It spends a lot of time trying to figure out if the path starts with a drive letter, a UNC, or just a root directory. Then lots of code trying to work out every variation of slashes and dots. But I don't think the problem is there.

      Anyway, I've been playing with version 3.33, the current version, on Vista and I'm not seeing the OP's results. If he can live with not concatenating an empty string to the file, maybe that will take care of it.

      --marmot

        Well, you never know when you've got incomplete information

        There's no information missing. The source is on CPAN. Feel free to check it. You'll find the same thing.

        I can't imagine why the code would change only the first part of the path to "\\". So I asked

        Probably because you think something was changed. It's what you get when you place a path seperator between '' and '/foo/go/do'. That's fine on unix, but not on Windows.

        Anyway, I've been playing with version 3.33, the current version, on Vista and I'm not seeing the OP's results.

        What did you get, then?

        I think I used 3.31 — I'll confirm when I can — and I got the correct but undesired result (single slash). ( Confirmed )