当前位置:  开发笔记 > 编程语言 > 正文

为什么我的Perl测试会因`use encoding'utf8'而失败?

如何解决《为什么我的Perl测试会因`useencoding'utf8'而失败?》经验,为你挑选了1个好方法。

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

#!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基于正则表达式的regexp 升级为utf8字符串,从而通过测试.

如果我删除了use encoding测试按预期传递的行,但我无法弄清楚为什么它们会在utf8模式下失败.

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



1> Aristotle Pa..:

不要使用encodingpragma.它坏了.(Juerd Waalboer在YAPC :: EU 2k8上提到了这个问题.)

它至少有两件不属于一起的东西:

    它指定源文件的编码.

    它指定文件输入/输出的编码.

并且为了侮辱伤害它也会以一种破碎的方式排在第一位:它将\xNN序列重新解释为未编码的八位位组,而不是将它们视为代码点,并对它们进行解码,从而阻止您在指定的编码之外表达字符并制作根据编码,您的源代码意味着不同的东西.这只是一个惊人的错误.

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

并明确使用I/O层或使用设置它们open编译有I/O自动转码正确.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有