Похоже, что Perl не сильно поддерживает работу с символическими ссылками в Windows (если есть). В соответствии с perlport page для символической ссылки и для readlink ни одна из соответствующих встроенных функций не реализована.
Что наиболее важно для вашего прямого вопроса, lstat также не реализован , так что нельзя иметь тест файла для символической ссылки. perlport для -X говорит, что
-g
, -k
, -l
, -u
, -A
не имеют особого значения.
Я ничего не нашел в CPAN, кроме использования Windows API.
Затем вы можете перейти к командной строке Windows и искать <SYMLINK>
в dir
output
# Build $basename and $path from $import_filename if needed
if ( not grep { /<SYMLINK>.*$basename/ } qx(dir $path) ) {
say "$0: $import_filename is not a symlink";
}
, где необходимо использовать $basename
, поскольку dir
не показывает путь. Компоненты имени файла с полным путем могут быть получены, например, с помощью основного модуля File :: Spec
use File::Spec;
my ($vol, $path, $basename) = File::Spec->splitpath($import_filename);
Если имя файла не имеет пути, тогда $vol
и $path
являются пустыми строками, что нормально для dir
, поскольку для текущего каталога не требуется аргументов. Если $import_filename
по дизайну относится к текущему каталогу (без пути), используйте его в регулярном выражении с qx(dir)
(без аргумента).
В выводе dir
также отображается имя цели, что может пригодиться.