Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试PerlIO::fse是否在文件测试操作符上工作?_Perl_Encoding_Utf 8_Perl Io - Fatal编程技术网

如何测试PerlIO::fse是否在文件测试操作符上工作?

如何测试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

这将打印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 = 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);