- 论坛徽章:
- 0
|
自己整了个简单用用
- use warnings;
- use strict;
- #use Data::Dumper;
- package MyDumper;
- sub Dumper{
- md(shift,0);
- }
- sub output{
- my $base=shift;
- my $data=shift;
- print ' 'x$base,$data;
- }
- sub md{
- my $p=shift;
- my $base=shift || 0;
- my $type=ref $p;
- if($type eq 'REF'){
- output(0,'\\');
- return md($p,$base+1);
- }
- if($type eq 'SCALAR'){
- if(defined $p){
- output(0,"\'$p\',\n");
- }
- else{
- output(0,"undef,\n");
- }
- return;
- }
- if($type eq 'ARRAY'){
- output(0,"[\n");
- for(@$p){
- if(ref $_){
- md($p->{$_},$base+1);
- }
- else{
- if(defined $_){
- output($base+1,"\'$_\',\n");
- }
- else{
- output($base+1,"undef,\n");
- }
- }
- }
- output($base-1,"],\n");
- return;
- }
- if($type eq 'HASH'){
- my @key=sort keys %$p;
- my $key_len=0;
- for(@key){
- if($key_len<length){
- $key_len=length;
- }
- }
- output(0,"{\n");
- for(@key){
- output($base,sprintf("%-${key_len}s => ",$_));
- if(ref $p->{$_}){
- md($p->{$_},$base+$key_len+5);
- }
- else{
- if(defined $p->{$_}){
- output(0,"\'$p->{$_}\',\n");
- }
- else{
- output(0,"undef,\n");
- }
- }
- }
- output($base-1,"},\n");
- return;
- }
- if($type eq 'CODE'){
- output(0,"sub{ DUMMY },\n");
- return;
- }
- if($type eq 'GLOB'){
- my $name=*$p;
- output(0,"\\$name,\n");
- return;
- }
- if($type eq 'IO::Handle'){
- output(0,'bless( , \'IO::Handle\' ),'."\n");
- return;
- }
- }
- 1;
- #use MyDumper;
- my $bb="222";
- my $foo=\$bb;
- print ref $foo;
- sub handler{
- }
- my $cc={
- aa=>1,
- bb=>{d=>{aaaaaaa=>1,bbb=>2}},
- cc=>[1,2,3,4],
- ff=>sub{},
- ee=>\*STDIN,
- ii=>\$foo,
- scalarref => *foo{SCALAR},
- arrayref => *ARGV{ARRAY},
- hashref => *ENV{HASH},
- coderef => *handler{CODE},
- ioref => *STDIN{IO},
- globref => *foo{GLOB},
- };
- MyDumper::Dumper($cc);
复制代码 |
|