]> git.donarmstrong.com Git - infobot.git/blob - scripts/oreilly_prettyp.pl
* Add vim formatting comments ( # vim:ts=4:sw=4:expandtab:tw=80 )
[infobot.git] / scripts / oreilly_prettyp.pl
1 @sample = (11.233,{3 => 4, "hello" => [6,7]});
2 pretty_print(@sample);
3
4 $level = -1; # Level of indentation
5
6 sub pretty_print {
7     my $var;
8     foreach $var (@_) {
9         if (ref ($var)) {
10             print_ref($var);
11         } else {
12             print_scalar($var);
13         }
14     }
15 }
16
17 sub print_scalar {
18     ++$level;
19     print_indented ($_[0]);
20     --$level;
21 }
22
23 sub print_ref {
24     my $r = $_[0];
25     if (exists ($already_seen{$r})) {
26         print_indented ("$r (Seen earlier)");
27         return;
28     } else {
29         $already_seen{$r}=1;
30     }
31     my $ref_type = ref($r);
32     if ($ref_type eq "ARRAY") {
33         print_array($r);
34     } elsif ($ref_type eq "SCALAR") {
35         print "Ref -> $r";
36         print_scalar($$r);
37     } elsif ($ref_type eq "HASH") {
38         print_hash($r);
39     } elsif ($ref_type eq "REF") {
40         ++$level;
41         print_indented("Ref -> ($r)");
42         print_ref($$r);
43         --$level;
44     } else {
45         print_indented ("$ref_type (not supported)");
46     }
47 }
48
49 sub print_array {
50     my ($r_array) = @_;
51     ++$level;
52     print_indented ("[ # $r_array");
53     foreach $var (@$r_array) {
54         if (ref ($var)) {
55             print_ref($var);
56         } else {
57             print_scalar($var);
58         }
59     }
60     print_indented ("]");
61     --$level;
62 }
63
64 sub print_hash {
65     my($r_hash) = @_;
66     my($key, $val);
67     ++$level;
68     print_indented ("{ # $r_hash");
69     while (($key, $val) = each %$r_hash) {
70         $val = ($val ? $val : '""');
71         ++$level;
72         if (ref ($val)) {
73             print_indented ("$key => ");
74             print_ref($val);
75         } else {
76             print_indented ("$key => $val");
77         }
78         --$level;
79     }
80     print_indented ("}");
81     --$level;
82 }
83
84 sub print_indented {
85     $spaces = ":  " x $level;
86     print "${spaces}$_[0]\n";
87 }
88
89 # vim:ts=4:sw=4:expandtab:tw=80