我被这段代码所困扰。我不知道原因可能是路径中带重音符号的字符。我正在使用的代码如下
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;
错误消息是
'N:/NBS_AR/COLLECTION/1.0 Times / 2.0 CollectionsMΘxico/ 1上的错误opendir。 Desglose宏:在backup_script.pl第24行没有此类文件或目录。
编辑: 使用
解决的问题use Encode::Local;
use Encode;
感谢解决方案的粘性位。
答案 0 :(得分:3)
是的,可能是路径中的特殊字符。至少我可以重现所描述的行为,尝试在Windows上以UTF-8编码的脚本opendir()
到目录1. Macro de solicitação de Desglose
。
尝试使用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');
...
对我有用。