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
我认为这种缺乏一致性是一个错误。
# 这是 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
我认为这种缺乏一致性是一个错误。