当前位置: 首页 > 知识库问答 >
问题:

Perl 6 POSIX字符类是否尊重语言环境?

袁雅逸
2023-03-14

Perl 6 POSIX字符类是否尊重LOCALE?我正在玩一个程序,该程序将打印与POSIX字符类匹配的所有字符,并且无论我设置什么语言环境,它似乎总是打印相同的集合。如果我的语言环境是en_US. US-ASCII,我仍然得到520位数字。在Mac上执行此操作意味着我没有在其他地方找到的很酷的语言环境探索工具(或者,它们以不同的名称存在),这也很烦人。

这都是在这个命令下完成的,我需要将其转换为shell别名:

$ perl6 -e 'say join " ", map *.gist, $*VM, $*PERL, $*DISTRO, $*KERNEL'
moar (2016.10) Perl 6 (6.c) macosx (10.10.5) darwin (14.5.0)

并且,该计划:

my $properties = set( <
    alnum alpha ascii blank cntrl digit graph lower print graph punct
    space upper word xdigit
    > );

sub MAIN ( Str $property where * ∈ $properties = 'digit' ) {
    say "NAME is " ~ %*ENV<NAME>;
    say "LC_CTYPE is " ~ ( %*ENV<LC_CTYPE> // %*ENV<LC_ALL> );
    say "property is $property";
    use MONKEY-SEE-NO-EVAL;


    my $pattern = EVAL "rx/ <$property> /";
    say "regex is " ~ $pattern.gist;

    show_chars( $pattern );
    }

sub show_chars ( Regex $pattern ) {
    for 0 .. 0x10FFFF -> $codepoint {
        state $count = 0;
        LAST { say "\nThere were $count characters" }
        my $char = chr( $codepoint );
        next unless $char ~~ $pattern;
        $count++;

        print "$char ";
        print "\n" if $count %% 50;
        }
    }

注意,我在程序中做了一件愚蠢的评估工作。我正在寻找rx中变量插值的替代品。S05表明这是一件事,但没有文档,所以我想不是。我开始探索自己的代币,但不得不继续。现在我问了另一个关于插值的问题。

共有2个答案

祁彬
2023-03-14

2019年更新许多链接不起作用。有些是永久性的,有些是暂时的,有些是有替代品的1

关于此答案:

谢谢你的工作!FWIW,我一点也不关心地区。我刚刚看到“POSIX”,很惊讶Perl 6会关心这个问题brian d foy

谢谢我看到莫里茨在我开始之前已经回答了你的问题。但我决定我想探索回购协议等,寻找字符串“locale”的匹配。。。然后我决定发布这些结果会很有用,而且在这里它们会更有用,在这里,搜索perl6和locale的人可能会找到它们,而不仅仅是作为个人要点雷夫

我并不是直接回答您关于POSIX和regex的狭隘问题。莫里茨回答了这个问题。这篇文章正是我对“Perl 6和/或Rakudo中对任何特定于语言环境的处理有什么支持?”这一更普遍问题的答案进行的广泛搜索的记录通过在各种repo等中搜索“locale”匹配项。

这个“答案”结合了权威的来源和疯狂的猜测。如果它有联系,那就是确定的。如果这是我的散文,那就是疯狂的猜测。

在现有公共模块列表中搜索“locale”将生成3个模块。Afaict,无影响Perl 6行为。

谷歌搜索“区域设置”的docs.perl6.org会产生“您的搜索-站点:docs.perl6.org区域设置-不匹配任何文档。”

在perl6进行“locale”页内搜索。失败将生成单个错误报告。

谷歌搜索设计/推测文档会产生三个感兴趣的结果:

>

提到故意不处理核心中的时间区域设置处理。

提及内置规则

在NQP的源代码中搜索“区域设置”会产生零匹配项。

搜索MoarVM的repo中的“locale”会在第三方GCC libatomic库(一个可移植的原子操作库;我不知道为什么这样的代码应该关心locale)。

谷歌在#perl6中搜索“locale”会产生大量提及,包括:

>

  • 2007 TimToady:“在标准unicode级别上……完全忽略了区域设置”。和“但如果你要求语言相关的字符处理,你可以要求它注意语言环境”。(我认为还没有人编写了后者所需的代码。)

    2008年,当莫里茨(Moritz为上述问题编写了另一个答案)问“知道Perl 6将如何处理语言环境吗?”时,没有人回答他。

    2012 TimToady说“我们倾向于强烈不喜欢地方”。

    2016年“一些关于日期、数字和内容的标准语言环境资料会很有用”

    2016“我不认为我们有区域意识的数字格式”。

    2016“Perl 6不处理任何特定于语言环境的东西,例如那些土耳其特殊情况AFAIK。”

    1该答案中的许多链接在2019年被破坏:

    >

  • perl6.fail永远消失了。请改用perl6和rakudo的rt bug跟踪器、perl6队列和gh问题队列。rt跟踪器正在消失,目前是只读的。

    设计perl6.org现在已经倒闭了,也许是永远的。我所知道的最好的替代品是归档。组织。但afaik无法跨页面搜索。

    irclog。perlgeek。反链接已永久关闭。我所知道的最好的替代品是colabti的irclog,它可以追溯到2009年左右。(莫里茨的perlgeek数据可追溯到2005年。)使用URL中的日期映射到colabti的日志。

  • 潘坚白
    2023-03-14

    据我所知,Perl 6正则表达式不支持POSIX字符类。您提到的内置方法映射到Unicode属性或块(或类似的构造,请原谅我对Unicode的无知),它们都不是特定于语言环境的。

    就评估而言,你可以这样处理它:

    my $re_string = '<alpha>';
    say 'a' ~~ rx / <$re_string> /;
    
     类似资料:
    • 问题内容: 在我的测试中,创建者不尊重EXIF标头。 例如,当设备拍摄的肖像图像不会根据相机的方向旋转实际的像素数据,而是将其存储在EXIF标头中时,当我调用和时,它们将返回错误的值(宽度的高度,反之亦然)。 有没有办法 尊重EXIF并产生正确的答案? 如果没有,建议使用哪种模式来处理此问题? 没有经验丰富的Android开发人员的建议,我看到的唯一方法是对拍摄的图像进行预处理(加载,根据EXIF

    • 要在不使用科学符号的情况下将double转换为string,建议的方法是 如在使用时在ostream中使用科学符号 我想将double转换为字符串,不使用任何分隔符,小数点为点/句号,即忽略区域设置。 根据对ostringstream、std::fixed和showpoint的描述,我无法确定 小数点是否在当前语言环境中?和 str()根据区域设置返回的字符串中是否会有其他分隔符(例如,千个分组)

    • 问题内容: Go语言是否像Java一样对字符串使用写时复制?也就是说,如果我按值将字符串传递给方法并且从未更改,则它将分配内存并复制字符串(这将节省时间),或者仅引用单个副本。 问题答案: 它不是写时复制的,因为字符串是不可变的。但是共享一个字符串也不会复制基础内存区域。在Go中,字符串表示为(长度,数据)对。如果传递字符串,Go将复制长度和指针,但不复制所指向的数据。 有关更多信息,请参阅gol

    • 主要内容:UTF-8 和 Unicode 有何区别?字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符。 Go语言的字符有以下两种: 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。 byte 类型是 uint8 的别名,对于只

    • 问题内容: 我开始学习Swift语言,我很好奇,这意味着Swift中的字符串和字符比较不区分语言环境?这是否意味着所有字符都像UTF-8字符一样存储在Swift中? 问题答案: (现在已为Swift 3更新所有代码示例。) 将Swift字符串与进行比较,基于所谓的“ Unicode规范化形式D” (可以使用进行计算 )进行词典上的比较 例如,分解 是两个Unicode代码点的序列 出于演示目的,我

    • 主要内容:适用于字符串构造的规则,字符串操作在R中的单引号或双引号中写入的任何值都将被视为字符串。在R内部将每个字符串存储在双引号内,即使您使用单引号创建它们。 适用于字符串构造的规则 字符串开头和结尾的引号应为双引号或双引号,他们不能混合。 双引号可以插入到以单引号开始和结尾的字符串中。 单引号可以插入到以双引号开始和结尾的字符串中。 双引号不能插入到以双引号开始和结尾的字符串中。 单引号无法插入到以单引号开始和结尾的字符串中。 有效字符