【问题标题】:Terminal ANSI colors does not work with Inline::Perl5 (Data::Printer)终端 ANSI 颜色不适用于 Inline::Perl5 (Data::Printer)
【发布时间】:2019-07-03 05:25:33
【问题描述】:

以下 Perl 5 脚本:

use strict;
use warnings;

use Data::Printer;
my @a = (1,2,3,4);
p @a;

给出输出:

(注意蓝色),而这个 Perl 6 脚本:

use Data::Printer:from<Perl5>;
my @a = 1,2,3,4;
p @a;

给出输出:

[
    [0] 1,
    [1] 2,
    [2] 3,
    [3] 4
]

但数字没有着色(如上面的 Perl 5 案例)。

系统信息

$ perl --version
This is perl 5, version 29, subversion 3 (v5.29.3) built for x86_64-linux
$ perl6 -e '.say for $*DISTRO, $*VM, $*PERL.compiler.version'
ubuntu (18.10.Cosmic.Cuttlefish)
moar (2018.11)
v2018.11

【问题讨论】:

  • @raiph use Data::Printer:from&lt;Perl5&gt; colored =&gt; 1Error while importing from 'Data::Printer': no such tag 'colored'
  • @raiph。应该是 { colored =&gt; 1 } 的 perl6 等价物,而不是 colored =&gt; 1
  • @ikegami and con:原来use Data::Printer {colored =&gt; 1}; 的 Raku 等效项是 use Data::Printer:from&lt;Perl5&gt; kv {colored =&gt; 1}。请参阅How do I turn the Perl 5 module Data::Printer's show_tied option off when using it in Raku? 了解更多信息。
  • @raiph,嗯。这听起来相当于use Data::Printer colored =&gt; 1; 也许它接受两者?但是文档说您应该提供对哈希 Data::Printer 的引用
  • @raiph,嗯,是的,它显示use Data::Printer colored =&gt; 1; 正在被稍后使用。

标签: raku


【解决方案1】:

这似乎是 version 0.40 of Data::Printer 的问题,这是 metacpan 上的当前版本。如果我安装 version 0.99 from GitHub 我也会用 Perl 6 获得颜色。另见this issue

我稍微调试了 0.40 版本,似乎从 Perl 5 版本调用 p @a 与从 Perl 6 调用相同的调用之间的唯一区别是 Perl 6 调用是在列表上下文中调用的,所以wantarray 为 Perl 6 调用返回 true,这显然使 Data::Printer 以某种方式关闭着色。

【讨论】:

  • “这显然使 Data::Printer 关闭着色”:此评论基于对 line 230 in the source code 的检查。其中$wantarray 为真,并且该真值在同一来源的第 152 行建立。感谢您的询问,我会再次检查。
  • 我可以确认它在 Perl 5 脚本的情况下已打开:我在第 227 行之前插入了 printf "Wantarray = %s\n", ($wantarray) ? "TRUE" : "FALSE"; 行,它为 Perl 5 脚本打印“FALSE”,为“TRUE”打印Perl 6 脚本。那么问题是为什么 Perl 6 会在列表上下文中调用该例程(语句左侧没有列表)。会不会是模块Inline::Perl5中的bug?
  • 谢谢。还有,对不起。我应该知道这一点的。 “为什么 Perl 6 会在列表上下文中调用例程”来自the IP5 README's Call a Perl 5 function section:“请注意,由于 Perl 6 没有相同的“上下文”概念,所以 Perl 5 函数总是在列表上下文中调用。”我记得niner说他很难做其他事情。 cf github.com/niner/Inline-Perl5/issues/31 我明天会在那里发表评论,除非你已经发表了评论。
猜你喜欢
  • 2021-09-02
  • 2018-09-30
  • 1970-01-01
  • 2019-06-29
  • 2018-07-26
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多