Ошибка при попытке открыть

Я застрял на этой части кода. Может быть, причина в акцентированных символах в пути, я не знаю. Код, который я использую ниже

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');
...

Это сработало для меня.

Другие вопросы по тегам