gpt4 book ai didi

perl - 为什么我的 Perl 测试会因使用编码 'utf8' 而失败?

转载 作者:行者123 更新时间:2023-11-28 19:43:24 26 4
gpt4 key购买 nike

我对这个测试脚本感到困惑:

#!perl

use strict;
use warnings;
use encoding 'utf8';
use Test::More 'no_plan';

ok('áá' =~ m/á/, 'ok direct match');

my $re = qr{á};
ok('áá' =~ m/$re/, 'ok qr-based match');

like('áá', $re, 'like qr-based match');

这三个测试都失败了,但我期望 use encoding 'utf8' 会同时升级文字 ááqr-基于正则表达式到 utf8 字符串,从而通过测试。

如果我删除 use encoding 行,测试会按预期通过,但我不明白为什么它们会在 utf8 模式下失败。

我在 Mac OS X(系统版本)上使用 perl 5.8.8。

最佳答案

不要使用 encoding pragma .它坏了。 (Juerd Waalboer 在 YAPC::EU 2k8 上提到了这一点。)

它至少同时做了两件不属于一起的事情:

  1. 它指定了源文件的编码。
  2. 它指定文件输入/输出的编码。

雪上加霜的是,它还以一种破旧的方式做了#1:它将 \xNN 序列重新解释为未解码的八位字节,而不是像代码点一样对待它们,并对它们进行解码,以防止您能够表达您指定的编码之外的字符,并根据编码使您的源代码具有不同的含义。这是大错特错的。

仅以 ASCII 或 UTF-8 编写源代码。在后一种情况下,utf8 pragma 是正确的用法。如果您不想使用 UTF-8,但又想包含非 ASCII 字符,请显式转义或解码它们。

并显式使用 I/O 层或使用 open pragma 设置它们 让 I/O 自动正确转码。

关于perl - 为什么我的 Perl 测试会因使用编码 'utf8' 而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/492838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com