代码之家  ›  专栏  ›  技术社区  ›  HardcoreHenry

调试子例程在perl中只打印哈希数组中的第一个条目

  •  0
  • HardcoreHenry  · 技术社区  · 6 年前

    我有一个调试程序,它让我在Perl中疯狂地胡思乱想。我原来的问题,现在却没有解决。我有以下代码:

    sub debug {
       my ($msg) = @_;
       print $DBGFILE "DBG: $msg\n" if $dbg;
    }
    

    在一个地方,我调用了一个哈希数组,如下所示:

    debug "v----------- parsed variables: -------------";
    debug Dumper @knownVars;
    debug "^----------- parsed variables: -------------";
    

    这似乎只输出数组中近200个条目中的第一个:

    DBG: v----------- parsed variables: -------------
    DBG: $VAR1 = {
          'local' => 1,
          ...
          'op' => ':=',
        };
    DBG: ^----------- parsed variables: -------------
    

    如果我使用调试器

    p Dumper @knownVars
    

    在那一行,它输出整个数组。这个数组很大(170个条目,每行大约有40-200行),所以我想知道我是不是在这里犯了语法错误,或者这是某种缓冲区大小限制。(注意perl 5.22.0)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Grinnz    6 年前

    首先,传递给函数(从函数返回)的参数在传输过程中只能是一件事:标量值列表。不能传递数组或哈希变量,除非通过引用它们(标量值)。有关详细信息,请参见 http://altreus.blogspot.com/2011/08/lists-and-things-made-of-lists.html .

    debug Dumper @knownVars;
    

    @knownVars 作为倾卸者的列表。根据 the documentation

    debug Dumper \@knownVars;
    

    通过传递对数组的引用而不是内容列表,这将使转储程序仅将一个项转换为一个字符串,然后调试函数将接收该项。

    或者,您可以更新调试函数,以遍历传入的所有字符串并对其执行操作 @_ print Dumper @items;