NAME
Sepia::Xref - Generates cross reference database for use by Perl programs.
SYNOPSIS
use Sepia::Xref qw(rebuild defs callers);
rebuild;
for (defs 'foo') {
printf "%s:%d: sub %s\::foo() defined\n", @{$_}[0..2];
}
for (callers 'foo') {
printf "%s:%d: sub foo() called by %s\::%s().\n", @{$_}[0..3];
}
DESCRIPTION
Sepia::Xref
is intended as a programmatic interface to the information supplied by B::Xref. It is intended to be a component for interactive Perl development, with other packages providing a friendly interface to the raw information it extracts. B::Xref
could be seen as an example of this sort of user-level tool, if it weren't for the fact that this module was created later, and stole most of its code.
Variables
%call
-
A map of subs to call locations and callers
%callby
-
A map of subs to subs called.
%var_use
-
A map of global/package variables to uses.
%var_def
-
A map of global/package variables to definitions (usually empty, since it only picks up local (...) declarations.
guess_module_file($pack, $ofile)
-
XXX: it turns out that rooting around trying to figure out the file ourselves is more reliable than what we grab from the op. Are we doing this wrong?
Functions
rebuild()
-
Rebuild the Xref database.
forget($func [, $mod])
-
Forget that
$func
was defined. redefined($func [, $pack])
-
Recompute xref info for
$func
, or$pack::$func
if$pack
given. callers($func)
-
List callers of
$func
. callees($func)
-
List callees of
$func
. var_defs($var)
-
Find locations where
$var
is defined. var_uses($var)
-
Find locations where
$var
is used. var_assigns($var)
-
Find locations where
$var
is assigned to. file_modules($file)
-
List the modules defined in file
$file
. var_apropos($expr)
-
Find variables matching
$expr
.
EXPORTS
Nothing by default, but all sub and variable described above can be imported. Sepia::Xref
also defines the tags :most
for the above-listed functions, and :all
for those and the variables as well.
BUGS
- See B::Xref.
- module names are ignored when looking up a sub.
- file and line number guessing is evil
-
Both should be done more cleanly and effectively. This is a hack because I don't quite understand what perl saves. We should be able to do as well as its warning messages.
- Some packages are not xref'd.
-
Some "internal" packages are deliberately not cross-referenced, either because they are hairy and cause us problems, or because they are so commonly included as to be uninteresting. The current list includes all pragmatic modules, plus: B, O, AutoLoader, DynaLoader, XSLoader, Config, DB, VMS, FileHandle, Exporter, Carp, PerlIO::Layer.
- Tree-view is not fully functional
-
Ideally, clicking the function names in tree view would take you to that function. This doesn't work. Also, more keys (like "q" to quit) should be implemented.
SEE ALSO
B::Xref
, of which Sepia::Xref
is a bastard child.
AUTHOR
B::Xref by Malcolm Beattie, m(angl|odifi)ed by Sean O'Rourke (seano@cpan.org).
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 117:
'=item' outside of any '=over'
- Around line 492:
You forgot a '=back' before '=head2'