#!/usr/bin/env perl use warnings; use strict; use Data::Dumper; use HTML::Tiny; sub dmp { Data::Dumper->new([\@_])->Terse(1)->Indent(0)->Dump =~ s/\A\s*\[(.*)\]\s*\z/($1)/sr } our ($version,$import); sub Foo::VERSION { shift eq 'Foo' or die; $version = &dmp } sub Foo::import { shift eq 'Foo' or die; $import = &dmp } $::INC{'Foo.pm'} = $0; my $h = HTML::Tiny->new; my @rows = ( [ \'th', ' ', $h->tt($h->entity_encode('Foo->VERSION(...)')), $h->tt($h->entity_encode('Foo->import(...)' )), ] ); while ( my $code = ) { chomp($code); ($version,$import) = (undef)x2; my $error = eval "no warnings; $code; 1" ? undef : $@; $error =~ s/\s+at\s+\(?eval\b.+\z//s if defined $error; if (defined $error) { push @rows, [ $h->td( $h->tt($h->entity_encode($code )), {colspan=>2}, $h->i($h->tt($h->entity_encode($error ))) ) ]; } else { push @rows, [ \'td', $h->tt($h->entity_encode($code )), defined $version ? $h->tt($h->entity_encode($version)) : '-', defined $import ? $h->tt($h->entity_encode($import )) : '-' ]; } } print $h->html( [ $h->head( $h->title( 'use' ) ), $h->body( [ $h->table({border=>1,cellspacing=>0}, [ \'tr', @rows ]), ] ) ] ); __DATA__ use Foo use Foo () use Foo 'list' use Foo 1.23 use Foo 1.23 () use Foo 1.23 'list' use Foo 1.23, 'list' use Foo 1.23 , 'list' use Foo '1.23' use Foo 1.2.3 use Foo 1.2.3 () use Foo 1.2.3 'list' use Foo 1.2.3, 'list' use Foo 1.2.3 , 'list' use Foo '1.2.3' use Foo '1.2.3' () use Foo '1.2.3' 'list' use Foo '1.2.3', 'list' use Foo '1.2.3' , 'list'