Blame t/01_about_verbose.t

Packit f92f8e
#!/usr/bin/perl -Tw
Packit f92f8e
Packit f92f8e
require 5;
Packit f92f8e
Packit f92f8e
use strict;
Packit f92f8e
Packit f92f8e
use Test::More tests => 1;
Packit f92f8e
Packit f92f8e
BEGIN {
Packit f92f8e
    use_ok( 'Locale::Maketext' );
Packit f92f8e
}
Packit f92f8e
Packit f92f8e
my @out;
Packit f92f8e
push @out,
Packit f92f8e
    "\n\nPerl v",
Packit f92f8e
    defined($^V) ? sprintf('%vd', $^V) : $],
Packit f92f8e
    " under $^O ",
Packit f92f8e
    (defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
Packit f92f8e
    ? ('(Win32::BuildNumber ', &Win32::BuildNumber(), ')') : (),
Packit f92f8e
    (defined $MacPerl::Version)
Packit f92f8e
    ? ("(MacPerl version $MacPerl::Version)") : (),
Packit f92f8e
    "\n"
Packit f92f8e
;
Packit f92f8e
Packit f92f8e
# Ugly code to walk the symbol tables:
Packit f92f8e
my %v;
Packit f92f8e
my @stack = ('');  # start out in %::
Packit f92f8e
my $this;
Packit f92f8e
my $count = 0;
Packit f92f8e
my $pref;
Packit f92f8e
while(@stack) {
Packit f92f8e
    $this = shift @stack;
Packit f92f8e
    die 'Too many packages?' if ++$count > 1000;
Packit f92f8e
    next if exists $v{$this};
Packit f92f8e
    next if $this eq 'main'; # %main:: is %::
Packit f92f8e
Packit f92f8e
    no strict 'refs';
Packit f92f8e
    if ( defined ${$this . '::VERSION'} ) {
Packit f92f8e
        $v{$this} = ${$this . '::VERSION'}
Packit f92f8e
    }
Packit f92f8e
    elsif (
Packit f92f8e
        defined *{$this . '::ISA'} or defined &{$this . '::import'}
Packit f92f8e
            or ($this ne '' and grep defined *{$_}{'CODE'}, values %{$this . '::'})
Packit f92f8e
        # If it has an ISA, an import, or any subs...
Packit f92f8e
    ) {
Packit f92f8e
        # It's a class/module with no version.
Packit f92f8e
        $v{$this} = undef;
Packit f92f8e
    }
Packit f92f8e
    else {
Packit f92f8e
        # It's probably an unpopulated package.
Packit f92f8e
        ## $v{$this} = '...';
Packit f92f8e
    }
Packit f92f8e
Packit f92f8e
    $pref = length($this) ? "$this\::" : '';
Packit f92f8e
    push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
Packit f92f8e
}
Packit f92f8e
push @out, " Modules in memory:\n";
Packit f92f8e
delete @v{'', '[none]'};
Packit f92f8e
foreach my $p (sort {lc($a) cmp lc($b)} keys %v) {
Packit f92f8e
    my $indent = ' ' x (2 + ($p =~ tr/:/:/));
Packit f92f8e
    push @out,  '  ', $indent, $p, defined($v{$p}) ? " v$v{$p};\n" : ";\n";
Packit f92f8e
}
Packit f92f8e
push @out, sprintf "[at %s (local) / %s (GMT)]\n", scalar(gmtime), scalar(localtime);
Packit f92f8e
my $x = join '', @out;
Packit f92f8e
$x =~ s/^/#/mg;
Packit f92f8e
print $x;
Packit f92f8e
Packit f92f8e
my $ascii = (chr(65) eq 'A') ? 'an ASCII' : 'a non-ASCII';
Packit f92f8e
print "# Running in $ascii world.\n";
Packit f92f8e
Packit f92f8e
print "# \@INC:\n", map("#   [$_]\n", @INC), "#\n#\n";
Packit f92f8e
Packit f92f8e
print "# \%INC:\n";
Packit f92f8e
foreach my $x (sort {lc($a) cmp lc($b)} keys %INC) {
Packit f92f8e
    print "#   [$x] = [", $INC{$x} || '', "]\n";
Packit f92f8e
}