2013年4月22日星期一

perl dump 数据的几种方式

在使用 Perl 语言的过程中,经常会需要打印或者 dump 一个变量的数据内容。 因为 perl  的 There‘ is more than one way to do it 。 所以可以选择的方式也肯多,所以自己也就总结了一下自己京城使用的到的几种方法:
   1:  #!/usr/bin/perl
   2:  use warnings;
   3:  use strict;
   4:  use Data::Dump qw(dump);
   5:  use Data::Dumper;
   6:  use Smart::Comments;
   7:  use YAML;
   8:   
   9:  my @a = (1, [2, 3], {4 => 5});


我这里要对数组 @a 进行 dump 以方便调试和查看其内容。
从我 use 模块也可以看出来我要使用的几种方法:

(1)首先尝试 Data::Dump  的 dump 方法
 
   1:  dump(@a);

其对应的输出为:

   1:  (1, [2, 3], { 4 => 5 })


(2)尝试  Data::Dumper  的 Dumper 

   1:  print Dumper(@a);

其对应的输出为:

   1:  $VAR1 = 1;
   2:  $VAR2 = [
   3:            2,
   4:            3
   5:          ];
   6:  $VAR3 = {
   7:            '4' => 5
   8:          };



(3) 尝试 Smart::Comments 的  ###

   1:  ### @a;


其对应的输出为:

   1:  ### @a: [
   2:  ###       1,
   3:  ###       [
   4:  ###         2,
   5:  ###         3
   6:  ###       ],
   7:  ###       {
   8:  ###         '4' => 5
   9:  ###       }
  10:  ###     ]


(4)  尝试 YAML 里面的 Dump 函数

   1:  print YAML::Dump(@a);


其对应的输出为:

   1:  --- 1
   2:  ---
   3:  - 2
   4:  - 3
   5:  ---
   6:  4: 5
 

(5) 最后尝试一下 print 函数

   1:  print "@a";

其对应的输出为:

   1:  1 ARRAY(0x1acf998) HASH(0x1aece20)


综述:以上几种方法,可以看到各有个的不同,也有侧重点,比如 Data:Dump  几乎是按照代码里面的数据结构输出了; YAML::Dump 是以 yaml 格式输出, 而 print 方法最简单,但是却无法打印内嵌的哈希元素,智能打印其引用的内存地址,这当然不是我们想要的。 Smart::Commnets  的输出很适合进行调试。 所以根据自己的需要各取所需了。   我这里只是列出了 5中方法,参考下面的这篇可以看到更多种方法的对比。
Dumping data in Perl
http://oylenshpeegul.typepad.com/blog/2012/01/dumping-data-in-perl.html