summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Util.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reply/Util.pm')
-rw-r--r--lib/Reply/Util.pm18
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/Reply/Util.pm b/lib/Reply/Util.pm
index e6d193a..69d32c5 100644
--- a/lib/Reply/Util.pm
+++ b/lib/Reply/Util.pm
@@ -17,7 +17,7 @@ use Scalar::Util 'blessed';
use Exporter 'import';
our @EXPORT_OK = qw(
$ident_rx $varname_rx $fq_ident_rx $fq_varname_rx
- methods
+ methods all_packages
);
# XXX this should be updated for unicode
@@ -49,4 +49,20 @@ sub methods {
return @methods;
}
+sub all_packages {
+ my ($root) = @_;
+ $root ||= \%::;
+
+ my @packages;
+ for my $fragment (grep { /::$/ } keys %$root) {
+ next if ref($root) && $root == \%:: && $fragment eq 'main::';
+ push @packages, (
+ $fragment,
+ map { $fragment . $_ } all_packages($root->{$fragment})
+ );
+ }
+
+ return map { s/::$//; $_ } @packages;
+}
+
1;