File::stat returns 在 <control> 字符 0x00 上定义 - perl - 功能还是错误?

File::stat returns defined on <control> character 0x00 - perl - feature or bug?

# 这是 perl 5,版本 22,颠覆 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 %s\n",
    $file, $sb->size, $sb->mode & 07777,
    scalar localtime $sb->mtime;
    printf "unicode is $unicode\n",
}

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

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

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

stat 将字符串原封不动地传递给 OS。 OS 需要一个以 NUL 结尾的字符串,因此当您传递 ./␀.

时它会看到 ./

5.20 之前,open 也是如此。它现在 returns 错误 ENOENT 而不是。

$ perlbrew use 5.20.0t

$ ls -1

$ perl -e'open my $fh, ">", "abc[=10=]def" or die $!;'
No such file or directory at -e line 1.

$ perlbrew use 5.18.2t

$ ls -1

$ perl -e'open my $fh, ">", "abc[=10=]def" or die $!;'

$ ls -1
abc

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