如何测试PerlIO::fse是否在文件测试操作符上工作?
这将打印2次如何测试PerlIO::fse是否在文件测试操作符上工作?,perl,encoding,utf-8,perl-io,Perl,Encoding,Utf 8,Perl Io,这将打印2次OK;我想这是因为Perl在内部将$dir存储为utf8 只要perl和文件系统存储在utf8中,我就有一种方法来检查是否对filetest操作符有影响 编辑: 也许我还没有完全理解PerlIO::fse的工作原理-在这个例子中,我看不到PerlIO::fse的任何效果: #!/usr/local/bin/perl use warnings; use 5.014; binmode STDOUT, 'utf8'; use utf8; my $dir1 = 'é'; my $dir2
OK
;我想这是因为Perl在内部将$dir
存储为utf8
只要perl和文件系统存储在utf8
中,我就有一种方法来检查是否对filetest操作符有影响
编辑: 也许我还没有完全理解
PerlIO::fse
的工作原理-在这个例子中,我看不到PerlIO::fse
的任何效果:
#!/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
使用以下各项进行测试:
#!/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.
如果第一个不是UTF-8编码的,那么它将在UTF-8语言环境中产生垃圾
如果第二个没有首先编码,它将在其他地区产生垃圾
(假设它们是相同的,但大多数/所有采用文件名的内置程序中都有一个bug,这个bug阻止您正确测试它。)
#!/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.
my $file_name = chr(0xE9); # e acute.
utf8::downgrade($file_name);
my $file_name = chr(0xE9);
utf8::upgrade($file_name);