The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Devel::MAT;

my $df = Devel::MAT->load( $ARGV[0] // die "Need dumpfile\n" )->dumpfile;

my @queue = ( [ $df->defstash, "" ] );
while( @queue ) {
   $_ = shift @queue;
   if( $_->[0]->isa( "Devel::MAT::SV::GLOB" ) ) {
      my ( $gv, $name ) = @$_;
      print "\$${name}\n" if $gv->scalar;
      print "\@${name}\n" if $gv->array;
      print "\%${name}\n" if $gv->hash;
      print "\&${name}\n" if $gv->code;

      unshift @queue, [ $gv->hash, $name ] if $gv->hash;
   }
   elsif( $_->[0]->isa( "Devel::MAT::SV::STASH" ) ) {
      my ( $stash, $pkg ) = @$_;
      my @more;
      foreach my $key ( sort $stash->keys ) {
         my $gv = $stash->value($key);

         my $name;
         if( $key =~ m/^([\0-\x1f])/ ) {
            $name = "{^" . chr(ord($1)+0x40) . substr( $key, 1 ) . "}";
         }
         else {
            $name = "${pkg}$key";
         }

         next if $name eq "main::";
         push @more, [ $gv, $name ];
      }

      unshift @queue, @more;
   }
}