簡體   English   中英

調試子例程只打印 perl 中散列數組中的第一個條目

[英]debug subroutine only printing first entry in array of hashes in perl

我有一個調試,它剛剛讓我在 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)

作為序言,傳遞給(和從)函數返回的參數只能是傳輸中的一件事:標量值列表。 您不能傳遞數組或散列變量,除非通過引用它們,這是一個標量值。 有關這方面的更多信息,請參閱http://altreus.blogspot.com/2011/08/lists-and-things-made-of-lists.html

debug Dumper @knownVars;

這會將@knownVars的內容作為列表傳遞給 Dumper。 根據文檔,Dumper 將在列表上下文中返回一個字符串列表,因此它將為每個元素返回一個字符串。 然后將此字符串列表傳遞給您的調試函數,該函數僅作用於參數列表中傳遞的第一項。

debug Dumper \@knownVars;

通過傳遞對數組的引用而不是內容列表,這使 Dumper 只能將一項轉換為一個字符串,然后您的調試函數將接收該字符串。

或者,您可以更新您的調試函數以循環並處理傳入@_所有字符串,就像常用慣用語中的print Dumper @items;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM