|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
require 5;
|
|
Packit |
4513e9 |
# Time-stamp: "2004-12-29 20:55:15 AST"
|
|
Packit |
4513e9 |
# Summary of, well, things.
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
use Test;
|
|
Packit |
4513e9 |
BEGIN {plan tests => 2};
|
|
Packit |
4513e9 |
ok 1;
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
use HTML::Tagset ();
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
#chdir "t" if -e "t";
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
{
|
|
Packit |
4513e9 |
my @out;
|
|
Packit |
4513e9 |
push @out,
|
|
Packit |
4513e9 |
"\n\nPerl v",
|
|
Packit |
4513e9 |
defined($^V) ? sprintf('%vd', $^V) : $],
|
|
Packit |
4513e9 |
" under $^O ",
|
|
Packit |
4513e9 |
(defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
|
|
Packit |
4513e9 |
? ("(Win32::BuildNumber ", &Win32::BuildNumber(), ")") : (),
|
|
Packit |
4513e9 |
(defined $MacPerl::Version)
|
|
Packit |
4513e9 |
? ("(MacPerl version $MacPerl::Version)") : (),
|
|
Packit |
4513e9 |
"\n"
|
|
Packit |
4513e9 |
;
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
# Ugly code to walk the symbol tables:
|
|
Packit |
4513e9 |
my %v;
|
|
Packit |
4513e9 |
my @stack = (''); # start out in %::
|
|
Packit |
4513e9 |
my $this;
|
|
Packit |
4513e9 |
my $count = 0;
|
|
Packit |
4513e9 |
my $pref;
|
|
Packit |
4513e9 |
while(@stack) {
|
|
Packit |
4513e9 |
$this = shift @stack;
|
|
Packit |
4513e9 |
die "Too many packages?" if ++$count > 1000;
|
|
Packit |
4513e9 |
next if exists $v{$this};
|
|
Packit |
4513e9 |
next if $this eq 'main'; # %main:: is %::
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
#print "Peeking at $this => ${$this . '::VERSION'}\n";
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
if(defined ${$this . '::VERSION'} ) {
|
|
Packit |
4513e9 |
$v{$this} = ${$this . '::VERSION'}
|
|
Packit |
4513e9 |
} elsif(
|
|
Packit |
4513e9 |
defined *{$this . '::ISA'} or defined &{$this . '::import'}
|
|
Packit |
4513e9 |
or ($this ne '' and grep defined *{$_}{'CODE'}, values %{$this . "::"})
|
|
Packit |
4513e9 |
# If it has an ISA, an import, or any subs...
|
|
Packit |
4513e9 |
) {
|
|
Packit |
4513e9 |
# It's a class/module with no version.
|
|
Packit |
4513e9 |
$v{$this} = undef;
|
|
Packit |
4513e9 |
} else {
|
|
Packit |
4513e9 |
# It's probably an unpopulated package.
|
|
Packit |
4513e9 |
## $v{$this} = '...';
|
|
Packit |
4513e9 |
}
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
$pref = length($this) ? "$this\::" : '';
|
|
Packit |
4513e9 |
push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
|
|
Packit |
4513e9 |
#print "Stack: @stack\n";
|
|
Packit |
4513e9 |
}
|
|
Packit |
4513e9 |
push @out, " Modules in memory:\n";
|
|
Packit |
4513e9 |
delete @v{'', '[none]'};
|
|
Packit |
4513e9 |
foreach my $p (sort {lc($a) cmp lc($b)} keys %v) {
|
|
Packit |
4513e9 |
$indent = ' ' x (2 + ($p =~ tr/:/:/));
|
|
Packit |
4513e9 |
push @out, ' ', $indent, $p, defined($v{$p}) ? " v$v{$p};\n" : ";\n";
|
|
Packit |
4513e9 |
}
|
|
Packit |
4513e9 |
push @out, sprintf "[at %s (local) / %s (GMT)]\n",
|
|
Packit |
4513e9 |
scalar(gmtime), scalar(localtime);
|
|
Packit |
4513e9 |
my $x = join '', @out;
|
|
Packit |
4513e9 |
$x =~ s/^/#/mg;
|
|
Packit |
4513e9 |
print $x;
|
|
Packit |
4513e9 |
}
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
print "# Running",
|
|
Packit |
4513e9 |
(chr(65) eq 'A') ? " in an ASCII world.\n" : " in a non-ASCII world.\n",
|
|
Packit |
4513e9 |
"#\n",
|
|
Packit |
4513e9 |
;
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
print "# \@INC:\n", map("# [$_]\n", @INC), "#\n#\n";
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
print "# \%INC:\n";
|
|
Packit |
4513e9 |
foreach my $x (sort {lc($a) cmp lc($b)} keys %INC) {
|
|
Packit |
4513e9 |
print "# [$x] = [", $INC{$x} || '', "]\n";
|
|
Packit |
4513e9 |
}
|
|
Packit |
4513e9 |
|
|
Packit |
4513e9 |
ok 1;
|
|
Packit |
4513e9 |
|