Ошибка при попытке открыть
Я застрял на этой части кода. Может быть, причина в акцентированных символах в пути, я не знаю. Код, который я использую ниже
my $var2 = realpath('C:\Users\brmelovi\Script\backups');
$source1 = 'N:\NBS_AR\COLLECTION\1.0 Times\2.0 Collections México\1. Macro de solicitação de Desglose';
$name1 = 'macro';
my $absol = path($source1)->absolute;
my @dire = $absol->children( qr/^$name1/);
say $dire[0];
$dire[0]->copy($var2);
return 1;
Файл и путь существуют. Мой код уже работает с другим путем и именем, как это
my $var2 = realpath('C:\Users\brmelovi\Script\backups');
$source1 = 'N:\NBS_AR\SISTEMAS AR\Macro Credit Analysis & Collection';
$name1 = 'Credit Analysis';
my $absol = path($source1) -> absolute;
my @dire = $absol->children( qr/^$name1/);
say $dire[0];
$dire[0]->copy($var2);
return 1;
Мой заголовок и use
заявления
use v5.28;
use strict;
use utf8;
use warnings;
use Cwd 'realpath';
use autodie;
use Path::Tiny;
Сообщение об ошибке
Ошибка opendir для 'N:/NBS_AR/COLLECTION/1.0 Times/2.0 Collections MΘxico/1. Macro de solicitaτπo de Desglose': нет такого файла или каталога в строке backup_script.pl 24.
Изменить: проблема решена с помощью
use Encode::Local;
use Encode;
Спасибо за решение проблемы.
1 ответ
Да, это, вероятно, специальные символы в пути. По крайней мере, я мог воспроизвести описанное поведение, пытаясь opendir()
каталог 1. Macro de solicitação de Desglose
в кодировке UTF-8 в Windows.
Попробуйте использовать Encode:: Locale для правильного кодирования строки перед ее передачей opendir()
,
...
use Encode::Locale;
use Encode;
...
$source1 = encode(locale => 'N:\NBS_AR\COLLECTION\1.0 Times\2.0 Collections México\1. Macro de solicitação de Desglose');
...
Это сработало для меня.