- 论坛徽章:
- 7
|
shibushi:- #!/usr/bin/perl
- sub gimme(\@) {
- my %h;
- for ( @{ +shift } ) {
- my $t = \%h;
- $t = $t->{$_} ||= {} for @$_[ 1 .. $#$_ - 1 ];
- $t->{ $_->[-1] } = undef;
- }
- %h;
- }
- my @path = map [ split /\/|\n/ ], <DATA>;
- my %tree = gimme @path;
- # b => { e => undef, f => undef }, c => undef, d => { g => undef, h => undef }
- __DATA__
- a/b/e
- a/b/f
- a/c
- a/d/g
- a/d/h
复制代码 or:- #!/usr/bin/perl
- sub gimme {
- my ( $k, %h );
- for (@_) {
- $k = $1, next if /^struct\s+(\S+)/;
- my ( $type, $field ) = /(\w+)\s+(\w+)/ or next;
- $type eq 'struct' ? ( $h{$field} = {} )
- : exists $h{$k} ? ( $h{$k}{$field} = undef )
- : ( $h{$field} = undef );
- }
- %h;
- }
- my %tree = gimme <DATA>;
- # d => { h => undef, g => undef }, c => undef, b => { f => undef, e => undef }
- __DATA__
- struct a
- {
- struct b;
- int c;
- struct d;
- };
- struct b
- {
- char e;
- short f;
- };
- struct d
- {
- int g;
- int h;
- }
复制代码 |
|