本帖最后由 rubyish 于 2017-05-14 21:30 编辑
biru:
tree:
- [['Sophia',[['Emma',[['Olivia',[['Ava',undef],['Mia',undef]]]]],['Isabella',[['Riley',undef],['Aria',[['Zoe',undef],['Charlotte',[['Lily',[['Layla',undef]]]]]]]]]]],['Amelia',undef],['Emily',[['Madelyn',undef],['Aubrey',[['Adalyn',undef],['Madison',[['Chloe',[['Harper',undef],['Abigail',undef],['Aaliyah',undef],['Avery',undef]]]]]]],['Evelyn',undef],['Kaylee',undef],['Ella',[['Ellie',undef],['Scarlett',undef],['Arianna',[['Hailey',undef],['Nora',undef]]]]]]]]
复制代码
ex:
- my $tree = load 'tree';
- draw $tree;
- save 'test', $tree;
复制代码
code:
- #!/usr/bin/perl -w
- use 5.010;
- sub draw;
- sub load;
- sub save;
- my $tree = load 'tree';
- draw $tree;
- save 'test', $tree;
- my $test = load 'test';
- draw $test;
- #__sub__
- sub load { do shift }
- sub draw { D_( @_, [] ) }
- sub save {
- my ( $file, $tree ) = @_;
- open my $save, '>', $file;
- print $save S_($tree);
- close $save;
- }
- sub D_ {
- state $his = [];
- my ( $do, $mo ) = @_;
- if ( !defined $do ) {
- for ( my $i = 0 ; $i <= $#$mo ; $i += 2 ) {
- if ( !defined $his->[$i] || $mo->[$i] ne $his->[$i] ) {
- print "|- $mo->[$i] ";
- }
- else {
- my $tab = $mo->[ $i + 1 ] ? ' ' : '|';
- print $tab . ' ' x ( length( $his->[$i] ) + 3 );
- }
- }
- print "\n";
- $his = $mo;
- return;
- }
- D_( $_->[1], [ @$mo, $_->[0], 0 ] ) for @$do[ 0 .. $#$do - 1 ];
- D_( $do->[-1][1], [ @$mo, $do->[-1][0], 1 ] );
- }
- sub S_ {
- my $t = shift;
- '[' . join( ',',
- map { ref ? S_($_) : defined ? "'$_'" : 'undef' } @$t
- ) . ']';
- }
- __DATA__
- $_
复制代码
|