Tag Archives: Perl

Perl打印包含哈希的哈希

在Perl里,有一种很常用的数据结构,哈希里的值是一个新的哈希,比如下面例子

my %hash = (
    foo => {
        id   => 1,
        name => "foo",
    },
    bar => {
        id   => 2,
        name => "bar",
    },
);

如果需要在调试过程打印这类的数据,最简单的方法就是在代码开始加入use Data::Dumper来导入Dumper模块,然后所要做的全部事情就是把哈希的引用传给Dumper就行。

print Dumper(%hash);

结果如下

$VAR1 = {
          'bar' => {
                     'name' => 'bar',
                     'id' => 2
                   },
          'foo' => {
                     'name' => 'foo',
                     'id' => 1
                   }
        };

或者可以直接2次for循环把哈希展开打印:

foreach my $key ( keys %hash ) {
    print "$key: n";
    foreach my $item ( keys %{ $hash{$key} } ) {
        print "  $item: " . $hash{$key}->{$item} . "n";
    }
}

结果如下

bar:
  name: bar
  id: 2
foo:
  name: foo
  id: 1

Perl里的true和false

Perl和其他语言有点不一样,它没有原生的布尔(Bool)型变量。不过,这

简单说,下面的情况在Perl里会被解析成fase:

  • 数字0
  • 字符串0
  • 空字符串
  • 值为undef的变量

其余的情况在Perl里都会被解析成true。

这样其实也很有好处,相同的逻辑,代码量上会精简不少,但额外的代价就是你得记住哪些情况等于true,哪些又是false。