As stated, this only works on Windows, also the OP asked for support for Windows
But on Windows I myself would prefer to use Win32::LongPath, because it supports real Unicode Directories and also filename up to 32000 chars Have a look on the following script: (You have to create these directories first)
use strict;
use warnings;
use utf8;
use feature 'unicode_strings';
use charnames ':full';
binmode(STDOUT, ":unix:utf8");
my @strange_dirs = (
'documentação',
'AC_RAÍZ_CERTICÁMARA_S',
'Катюша',
'Катюша',
'москва',
'ελληνικά-русский',
);
for my $dir (@strange_dirs) {
print "Looking for directory: [$dir]\n";
if (-d decode_u8($dir)) {
print "Directory found: [$dir]\n";
}
else {
print "---> Error: Directory [$dir] not found <---\n";
}
}
print "---- now the same with Win32::Longpath ----\n";
use Win32::LongPath;
for my $dir (@strange_dirs) {
print "Looking for directory: [$dir]\n";
if (testL ('d', $dir)) { # same as -d $dir
print "Directory found: [$dir]\n";
}
else {
print "---> Error: Directory [$dir] not found <---\n";
}
}
sub encode_u8 { my $s = shift; utf8::encode($s); $s };
sub decode_u8 { my $s = shift; utf8::decode($s); $s };
You will see that Win32::LongPath correctly displays all these directories, but -d decode_u8($dir) doesn't.
My test Environment is: Windows 10 Version 10.0.14393, Perl 64-bit (revision 5 version 22 subversion 2) |