Perl哈希键仅在紧接着换行符时打印

时间:2012-02-17 19:20:24

标签: perl printing hash key

也许我是愚蠢的,但这对我来说没有意义......我通过从众多文件中读取唯一代码和错误代码构建了一个哈希。当我尝试打印出key = value对时,除非紧接着是换行符,否则键不会出现。

以下是代码:

foreach my $key (keys %codehash){
    print "Key: $key\tValue: $codehash{$key}\n";
    print "Key: $key\n";
    print "Value: $codehash{$key}\n";
    print "\n\n";
}

这是输出:

         Value: NoParamSpecified
    Key: 016C
    Value: NoParamSpecified


        Value: billingAddress.firstName.lengthLong
    Key: 003M
    Value: billingAddress.firstName.lengthLong


         Value: billingAddress.address1.lengthLong
    Key: 0041
    Value: billingAddress.address1.lengthLong

请注意,它甚至不打印"键:"第一个语句中的纯文本,只是选项卡及其后。我以前从来没有见过这个。

3 个答案:

答案 0 :(得分:7)

行为与最后包含"\r"的所有密钥一致。十六进制转储将确认这一点。

确认这一点的另一种方法是在打印出来之前在键上运行合适的正则表达式替换:

$key =~ s/\s+$//;

答案 1 :(得分:3)

我打算打赌,因为你正在读取数据,某些地方的数据包含格式化字符,而你将它们包含在关键数据中(如果格式化字符正在执行“返回到行的开头“,等等。”

要解决这个问题,请尝试在base64或hex中打印密钥,我打赌你会发现它比你想象的要长得多。

use MIME::Base64;
# ...
print "Key: " . encode_base64($key) . "\tValue: $codehash{$key}\n";

答案 2 :(得分:-4)

这是终端I / O的一部分。它只在一行的末尾打印。设置输出autoflush以使其在每个打印语句后打印:

foreach my $key (keys %codehash){
    local $| = 1;
    print "Key: $key\tValue: $codehash{$key}\n";
    print "Key: $key\n";
    print "Value: $codehash{$key}\n";
    print "\n\n";
}

请参阅perldoc perlvar并搜索/ OUTPUT_AUTOFLUSH /.