【问题标题】:Altering parameters in Data::Printer in Perl6在 Perl6 中更改 Data::Printer 中的参数
【发布时间】:2019-04-22 18:28:57
【问题描述】:

我在 Perl6 中使用 Data::Printer 打印数据,这是一个很棒的包,但我正在尝试更改参数,但我无法做到。

例如,我想要:

HG00112 {
    gained_site                    {
        9:10162   0,
        9:10272   var{HG00112}{gained_site}{9:10162},
        9:10326   var{HG00112}{gained_site}{9:10162},
        ...
}(tied to Perl6::Hash)

看起来像

HG00112 {
    gained_site                    {
        9:10162   0,
        9:10272   0,
        9:10326   0,
        ...
}(tied to Perl6::Hash)

为了更易于阅读(我不特别关心tied to Perl6::Hash

这个散列元素可以用 JSON 看到:

"HG00112": {
    "discordant_multiallelic_loss": 0,
    "concordant_hom_alt": 4,
    "discordant_het_to_alt": 0,
    "discordant_hom_alt_to_ref": 0,
    "discordant_hom_ref_to_alt": 0,
    "lost_site": 0,
    "concordant_het": 3,
    "discordant_multiallelic_gain": 0,
    "discordant_hom_alt_to_het": 0,
    "discordant_call_to_no_call": 0,
    "discordant_het_to_ref": 0,
    "concordant_hom_ref": 5,
    "concordant_site": 18,
    "discordant_no_call_to_call": 0,
    "concordant_no_call": 6,
    "concordant_multiallelic": 0,
    "gained_site": 0,
    "discordant_hom_ref_to_het": 0
}

我通常使用 use Data::Printer:from<Perl5> 加载包,并使用来自

的建议

Terminal ANSI colors does not work with Inline::Perl5 (Data::Printer)

我已经尝试在 https://metacpan.org/pod/Data::Printer 的建议下使用它,即

use Data::Printer:from<Perl5> {show_tied => 0}

&use Data::Printer:from<Perl5> show_tied => 0

但都显示错误

从“Data::Printer”导入时出错:没有这样的标签“show_tied

我怎样才能让Data::Printer 的输出看起来像第二个代码选择,而没有丑陋的var{...

---编辑---

略有改进,脚本识别选项show_tied但仍然不使用:

我的测试脚本:

use JSON::Fast;
use Data::Printer:from<Perl5> 'show_tied', 0;

my %conc = from-json '{"HG00112": {
    "discordant_multiallelic_loss": 0,
    "concordant_hom_alt": 4,
    "discordant_het_to_alt": 0,
    "discordant_hom_alt_to_ref": 0,
    "discordant_hom_ref_to_alt": 0,
    "lost_site": 0,
    "concordant_het": 3,
    "discordant_multiallelic_gain": 0,
    "discordant_hom_alt_to_het": 0,
    "discordant_call_to_no_call": 0,
    "discordant_het_to_ref": 0,
    "concordant_hom_ref": 5,
    "concordant_site": 18,
    "discordant_no_call_to_call": 0,
    "concordant_no_call": 6,
    "concordant_multiallelic": 0,
    "gained_site": 0,
    "discordant_hom_ref_to_het": 0
}}';

p %conc;

显示几乎无用的输出:

{
    HG00112   {
        concordant_het                 3,
        concordant_hom_alt             var{HG00112}{concordant_het},
        concordant_hom_ref             var{HG00112}{concordant_het},
        concordant_multiallelic        var{HG00112}{concordant_het},
        concordant_no_call             var{HG00112}{concordant_het},
        concordant_site                var{HG00112}{concordant_het},
        discordant_call_to_no_call     var{HG00112}{concordant_het},
        discordant_het_to_alt          var{HG00112}{concordant_het},
        discordant_het_to_ref          var{HG00112}{concordant_het},
        discordant_hom_alt_to_het      var{HG00112}{concordant_het},
        discordant_hom_alt_to_ref      var{HG00112}{concordant_het},
        discordant_hom_ref_to_alt      var{HG00112}{concordant_het},
        discordant_hom_ref_to_het      var{HG00112}{concordant_het},
        discordant_multiallelic_gain   var{HG00112}{concordant_het},
        discordant_multiallelic_loss   var{HG00112}{concordant_het},
        discordant_no_call_to_call     var{HG00112}{concordant_het},
        gained_site                    var{HG00112}{concordant_het},
        lost_site                      var{HG00112}{concordant_het}
    } (tied to Perl6::Hash)
} (tied to Perl6::Hash)

【问题讨论】:

  • 请展示您是如何创建%HG00112,以便我们尝试重现
  • 我无法复制:pastebin.com/jVhsZNuG
  • 我只有几秒钟;这是一个有点疯狂的猜测。请尝试{;show_tied =&gt; 0}{'show_tied' =&gt; 0}{;{show_tied =&gt; 0}}{;{'show_tied' =&gt; 0}}
  • 我正在运行基于 MoarVM、Data::Printer 0.40、Perl 5.30.1 到 perlbrew 和 Inline::Perl5 版本 0.38 的 Raku/Perl6 2018.03。也许其中之一是原因? zef 升级时遇到问题 Inline::Perl5

标签: printing raku


【解决方案1】:

正如我在下面介绍和链接的Q+A 中解释的那样,您应该能够控制DP 的name 选项,如下所示:

use Data::Printer kv { name => '' }

这有望从“丑陋的var{...”位中至少消除var

如果是这样,那反过来至少会证明你现在能够控制 DP 的选项。

充其量,将name 设置为'' 将关闭整个循环参考显示。 (如果没有,也许将其设置为0?)

在最坏的情况下,您仍然会在循环引用的开头看到三个字母“名称”var,我认为我们必须找出原因。

如果您可以评论kv { name =&gt; '' } 的工作结果,我们将取得进展。

在 Raku 中使用 Perl 5 模块 Data::Printer 的 show_tied 选项时如何关闭它?

您的问题的一个关键部分是您明确“不关心......特别”((tied to Perl6::Hash) 位,由 DP 的 show_tied 选项控制)仍然非常值得明确解决。如果不出意外,它会在尝试设置时不可避免地成为常见问题解答,在 Raku use 语句中,几乎 any Perl 模块的几乎 any 命名选项。

所以我写了一个 Q+A 对来解决这个问题:How do I turn the Perl 5 module Data::Printer's show_tied option off when using it in Raku?

“丑陋的var{...

我现在可以提出的第一个也是最重要的一点是,就像 one of their comments on your question 中的 @HåkonHægland++ 一样,我无法重现您的问题。

也就是说,当我运行您最后列出的测试代码时,它会显示(在... 处省略了一些行):

{
    HG00112   {
        concordant_het                 3,
        concordant_hom_alt             4,
        concordant_hom_ref             5,
        concordant_multiallelic        0,
        concordant_no_call             6,
        concordant_site                18,
        discordant_call_to_no_call     0,
        ...
        discordant_no_call_to_call     0,
        gained_site                    0,
        lost_site                      0
    }
}

如您所见,没有“丑陋”的循环引用。

这是show_tied 设置为关闭,根据上面链接的 Q+A。但即使 show_tied 保持打开状态,默认情况下,我仍然会得到上面的内容,只是带有几个 (tied to Perl6::Hash) 注释。

因此,正如@HåkonHægland++ 在他们的另一个 cmets 中对您的问题所解释的那样,var{... 部分可能与 show_tied 无关,而是由于您未与我们共享的 JSON 数据中的循环引用。

简而言之,您的问题与您的数据和/或使用 DP 的 name 选项有关,而不是其 show_tied 选项。

我认为我们 Raku 人不太可能帮助处理您的数据(可能不是由 Raku 生成的),但我们应该能够帮助取得进展,甚至可能在适当使用一些 DP 的程度上解决您的问题选项。

【讨论】:

  • 即使像你说的那样设置了show_tied,它仍然输出相同的无用var变量:(我已经编辑以显示测试脚本。
  • 感谢您的跟进和编辑您的问题。很抱歉没有解决问题。 :( 但无论如何节日快乐。:) 如果您或我或其他人在 1 月初之前还没有解决这个问题,我将提供 500 点赏金来尝试解决这个问题。
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2021-12-13
  • 2020-02-29
相关资源
最近更新 更多