- 论坛徽章:
- 0
|
- jzhu@jzhu-HP-Z400-Workstation:~/my-perl-scripts/chinaunix$ cat ../algorithm/traverse_hash.pl
- #!/usr/bin/perl
- use strict;
- use warnings;
- use v5.10;
- my %people = (
- memowe => {
- NAMES => {
- memo => { AGE => 666 },
- we => { AGE => 667 },
- },
- },
- bladepanthera => {
- NAMES => {
- blade => { AGE => 42 },
- panthera => { AGE => { Fuck => "you" } },
- },
- },
- );
- sub traverse (&$@) {
- my ( $do_it, $data, @path ) = @_;
- # iterate
- foreach my $key ( sort keys %$data ) {
- # handle sub-tree
- if ( ref( $data->{$key} ) eq 'HASH' ) {
- &traverse( $do_it, $data->{$key}, @path, $key );
- next;
- }
- # handle leave
- $do_it->( $data->{$key}, @path, $key );
- }
- }
- traverse { say shift . " (@_)" } \%people;
- jzhu@jzhu-HP-Z400-Workstation:~/my-perl-scripts/chinaunix$ perl ../algorithm/traverse_hash.pl
- 42 (bladepanthera NAMES blade AGE)
- you (bladepanthera NAMES panthera AGE Fuck)
- 666 (memowe NAMES memo AGE)
- 667 (memowe NAMES we AGE)
复制代码 |
|