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