Как проверить, работает ли PerlIO :: fse с операторами проверки файлов? - PullRequest
0 голосов
/ 27 сентября 2011
#!/usr/local/bin/perl
use warnings;
use strict;
use utf8;
use Encode qw(encode);
my $dir = '/data/Delibes, Léo';

if ( -d $dir ) {
    print "OK\n";
}

if ( -d encode 'utf8', $dir ) {
    print "OK\n";
}

Печатается 2 раза OK;Я полагаю, это связано с тем, что Perl хранит $dir внутренне как utf8.

I, есть способ проверить, влияет ли PerlIO :: fse на операторы проверки файлов, пока Perl ифайловая система хранится в utf8?


Редактировать:

#!/usr/local/bin/perl
use warnings;
use 5.014;
binmode STDOUT, 'utf8';
use utf8;

my $dir1 = 'é';
my $dir2 = chr(0xE9);

opendir my $dh1, $dir1 or warn '1: ', $!;
say "OK1" if -d $dir1;
opendir my $dh2, $dir2 or warn '2: ', $!;
say "OK2" if -d $dir2;

utf8::upgrade( $dir1 );
utf8::upgrade( $dir2 );

opendir my $dh3, $dir1 or warn '3: ', $!;
say "OK3" if -d $dir1;
opendir my $dh4, $dir2 or warn '4: ', $!;
say "OK4" if -d $dir2;

# OK1
# 2: Datei oder Verzeichnis nicht gefunden at ./temp1.pl line 12.
# OK3
# OK4

Возможно, я не совсем понял, как работает PerlIO::fse - в этом примере я не вижу никакого эффекта отPerlIO::fse:

#!/usr/local/bin/perl
use warnings;
use 5.014;
binmode STDOUT, 'utf8';
use utf8;
use PerlIO::fse 'utf-8';

my $dir1 = 'é';
my $dir2 = chr(0xE9);

opendir my $dh1, $dir1 or warn '1: ', $!;
say "OK1" if -d $dir1;
opendir my $dh2, $dir2 or warn '2: ', $!;
say "OK2" if -d $dir2;

# OK1                                                                                       
# 2: Datei oder Verzeichnis nicht gefunden at ./temp1.pl line 13. 

1 Ответ

1 голос
/ 27 сентября 2011

Тест с:

my $file_name = chr(0xE9);  # e acute.
utf8::downgrade($file_name);

my $file_name = chr(0xE9);
utf8::upgrade($file_name);

Первый вызовет нежелательную информацию в локали UTF-8, если он не кодирован в UTF-8 первым.

Второй вызовет нежелательные сообщения в других локалях, если он не закодирован первым.

(Предполагается, что они одинаковы, но в большинстве / всех встроенных функциях, которые принимают имена файлов, есть ошибка, та же самая ошибка, которая мешает вам правильно ее протестировать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...