文件::stat 返回在<control>字符0x00上定义的 - 功能还是错误?



# 这是 perl 5, 版本 22, subversion 1 (v5.22.1( # 为 x86_64-linux-gnu-thread-multi 构建

use File::stat;
my $wchar   = chr 0;
my $unicode = sprintf 'U+%06X', ord $wchar;
my $file    = './'.$wchar;
my $sb      = stat($file);
if($sb){
printf "File is %s, size is %s, perm %04o, mtime %sn",
$file, $sb->size, $sb->mode & 07777,
scalar localtime $sb->mtime;
printf "unicode is $unicoden",
}

-----给我..----

File is ./^@, size is 4096, perm 0775, mtime Mon Aug 14 20:34:21 2017
unicode is U+000000

我有点莫名其妙。为什么会发生这种情况的任何建议。是功能还是错误?

stat

原封不动地将字符串传递给操作系统。操作系统需要一个以 NUL 结尾的字符串,因此当您传递./␀时,它会看到./

在 5.20 之前,open也是如此。它现在改为返回错误ENOENT

$ perlbrew use 5.20.0t
$ ls -1
$ perl -e'open my $fh, ">", "abcdef" or die $!;'
No such file or directory at -e line 1.
$ perlbrew use 5.18.2t
$ ls -1
$ perl -e'open my $fh, ">", "abcdef" or die $!;'
$ ls -1
abc

我认为这种缺乏一致性是一个错误。

最新更新