为什么 comb 在循环内表现不同?

Why does comb behave differently inside the loop?

注意:我在 REPL 中使用 这是基于 MoarVM 2019.03 版构建的 Rakudo Star 2019.03.1 版 实施 Perl 6.d.

欧拉项目 #22 中有一个 names.txt 文件类似于 "JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO", ...

当我读入、拆分和排序时,我得到了我期望的名字列表。

for '../names.txt'.IO.slurp.split(',').sort -> $name {
    say $name;
}

打印出来

...
"ZONIA"
"ZORA"
"ZORAIDA"
"ZULA"
"ZULEMA"
"ZULMA"

现在如果我添加 comb()

for '../names.txt'.IO.slurp.split(',').sort -> $name {
    say $name.comb;
}

我正在

...
(" Z O N I A ")
(" Z O R A ")
(" Z O R A I D A ")
(" Z U L A ")
(" Z U L E M A ")
(" Z U L M A ")

但是,如果我只是 运行 来自 repl;

> "ZULMA".comb

我明白了

(Z U L M A) # 注意缺少引号

为什么 comb 在这两种情况下表现不同?

它的行为没有什么不同。在一种情况下,引号是语法元素 - 代码的一部分 - 在另一种情况下,数据是从文件中逐字读取的:

"ZULMA".comb
'"ZULMA"'.comb

数据不同。不是行为。