Data-Reach Data::Reach - Walk down or iterate through a nested Perl datastructure =head1 SYNOPSIS # reach a subtree or a leaf under a nested datastructure use Data::Reach; my $node = reach $data_tree, @path; # @path may contain a mix of hash keys and array indices # do something with all paths through the datastructure .. my @result = map_paths {do_something_with(\@_, $_)} $data_tree; # .. or loop through all paths my $next_path = each_path $data_tree; while (my ($path, $val) = $next_path->()) { do_something_with($path, $val); } # import under a different name use Data::Reach reach => as => 'walk_down'; my $node = walk_down $data_tree, @path; # optional changes of algorithm, lexically scoped { no Data::Reach qw/peek_blessed use_overloads/; use Data::Reach reach_method => [qw/foo bar/]; my $node = reach $object_tree, @path; } # after end of scope, back to the regular algorithm =head1 DESCRIPTION Perl supports nested datastructures : a hash may contain references to other hashes or to arrays, which in turn may contain further references to deeper structures -- see L. Walking down through such structures usually involves nested loops, and possibly some tests on C for finding out if the next level is an arrayref or a hashref. The present module offers some utilities for easier handling of nested datastructures : =over =item * the C function finds a subtree or a leaf according to a given C<@path> -- a list of hash keys or array indices. If there is no data corresponding to that path, C is returned, without any autovivification within the tree. =item * the C function applies a given code reference to all paths within the nested datastructure. =item * the C function returns an iterator over the nested datastructure; it can be used in the same spirit as an C statement over a simple hash, except that it will walk through all paths within the nested datastructure =back INSTALLATION To install this module, run the following commands: perl Build.PL perl Build perl Build test perl Build install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc Data::Reach You can also look for information at: https://metacpan.org/pod/Data::Reach LICENSE AND COPYRIGHT Copyright (C) 2015, 2022 Laurent Dami This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at: L