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.
Functions
- "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?
- "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.