小编Kao*_*oru的帖子

为什么perldoc将'明斯特'评为'明斯特'

我有一个简单的POD文本文件:

$ cat test.pod 
=encoding UTF-8

Münster
Run Code Online (Sandbox Code Playgroud)

它按照UTF-8编码,根据文件的这个文字十六进制转储:

00000000  3d 65 6e 63 6f 64 69 6e  67 20 55 54 46 2d 38 0a  |=encoding UTF-8.|
00000010  0a 4d c3 bc 6e 73 74 65  72 0a                    |.M..nster.|
0000001a
Run Code Online (Sandbox Code Playgroud)

"ü"被编码为两个字节C3和BC.

但是,当我perldoc在文件上运行时,它将我可爱的格式化UTF-8字符转换为ASCII.

更重要的是,它正确地处理了将"ü"表示为"ue"的德语惯例.

$ perldoc test.pod | cat
TEST(1)               User Contributed Perl Documentation              TEST(1)

Muenster

perl v5.16.3                      2014-06-10                           TEST(1)
Run Code Online (Sandbox Code Playgroud)

它为什么这样做?

是否有一个额外的声明我可以放入我的文件以阻止它发生?


经过额外的调查后,App::perlbrew我发现不同之处在于拥有特定版本的Pod :: Perldoc.

perl-5.10.1    3.14_04    Muenster
perl-5.12.5    3.15_02    Muenster
perl-5.14.4    3.15_04    Muenster
perl-5.16.2    3.17       Münster …
Run Code Online (Sandbox Code Playgroud)

perl perldoc utf-8 perl-pod

12
推荐指数
1
解决办法
160
查看次数

我可以找出给定文件句柄的Perl IO Layer吗?

是否有可能找出Perl文件句柄上的IO Layer?

例如:

open(my $fh, '<:encoding(UTF-8)', $filename)
    or die "Unable to open '$filename': $!";

say io_layer($fh); # prints "encoding(UTF-8)"
Run Code Online (Sandbox Code Playgroud)

perl

9
推荐指数
1
解决办法
243
查看次数

为什么Perl的规范"真实"和"虚假"价值PVNV内部?

Perl有一个规范的"真"和"假"值,它用于布尔否定的情况用!not.

#!/usr/bin/env perl

use strict;
use warnings;

use Data::Dumper;

print Dumper !1;    # outputs $VAR1 = '';
print Dumper !!1;   # outputs $VAR1 = 1;
Run Code Online (Sandbox Code Playgroud)

到目前为止都很好.

但是,当我看值与Devel::Peek很显然,他们并不等同于字面''1,他们都是SV PVNV值.

$ perl -MDevel::Peek -E 'Dump ""; Dump !1;' 2>&1 | grep '^SV'
SV = PV(0x15e5140) at 0x1603298
SV = PVNV(0x15e3010) at 0x7814b0

$ perl -MDevel::Peek -E 'Dump 1; Dump !!1;' 2>&1 | grep '^SV'
SV = IV(0xfce228) at 0xfce238
SV = PVNV(0xfae030) …
Run Code Online (Sandbox Code Playgroud)

perl perlguts

3
推荐指数
1
解决办法
164
查看次数

标签 统计

perl ×3

perl-pod ×1

perldoc ×1

perlguts ×1

utf-8 ×1