An easy way to find the file that whatever::function is in: use %INC. This maps package names to file names.
$ perl -de0
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1): 0
DB<1> x %INC
0 'warnings/register.pm'
1 '/usr/local/lib/perl5/5.8.8/warnings/register.pm'
2 'attributes.pm'
3 '/usr/local/lib/perl5/5.8.8/attributes.pm'
4 'XSLoader.pm'
5 '/usr/local/lib/perl5/5.8.8/darwin-2level/XSLoader.pm'
6 'IO/Handle.pm'
7 '/usr/local/lib/perl5/5.8.8/darwin-2level/IO/Handle.pm'
8 'Term/Cap.pm'
9 '/usr/local/lib/perl5/5.8.8/Term/Cap.pm'
10 'SelectSaver.pm'
11 '/usr/local/lib/perl5/5.8.8/SelectSaver.pm'
12 'Term/ReadLine/Perl.pm'
13 '/usr/local/lib/perl5/site_perl/5.8.8/Term/ReadLine/Perl.pm'
14 'warnings.pm'
15 '/usr/local/lib/perl5/5.8.8/warnings.pm'
16 'Carp/Heavy.pm'
17 '/usr/local/lib/perl5/5.8.8/Carp/Heavy.pm'
18 'Config.pm'
19 '/usr/local/lib/perl5/5.8.8/darwin-2level/Config.pm'
20 'Symbol.pm'
21 '/usr/local/lib/perl5/5.8.8/Symbol.pm'
22 'IO.pm'
23 '/usr/local/lib/perl5/5.8.8/darwin-2level/IO.pm'
24 'Carp.pm'
25 '/usr/local/lib/perl5/5.8.8/Carp.pm'
26 'Term/ReadLine.pm'
27 '/usr/local/lib/perl5/5.8.8/Term/ReadLine.pm'
28 'vars.pm'
29 '/usr/local/lib/perl5/5.8.8/vars.pm'
30 'strict.pm'
31 '/usr/local/lib/perl5/5.8.8/strict.pm'
32 'Exporter.pm'
33 '/usr/local/lib/perl5/5.8.8/Exporter.pm'
34 'Config_heavy.pl'
35 '/usr/local/lib/perl5/5.8.8/darwin-2level/Config_heavy.pl'
36 'Term/ReadLine/readline.pm'
37 '/usr/local/lib/perl5/site_perl/5.8.8/Term/ReadLine/readline.pm'
38 'Term/ReadKey.pm'
39 '/usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Term/ReadKey.p
+m'
40 'AutoLoader.pm'
41 '/usr/local/lib/perl5/5.8.8/AutoLoader.pm'
42 'perl5db.pl'
43 '/usr/local/lib/perl5/5.8.8/perl5db.pl'
44 'DynaLoader.pm'
45 '/usr/local/lib/perl5/5.8.8/darwin-2level/DynaLoader.pm'
46 'SelfLoader.pm'
47 '/usr/local/lib/perl5/5.8.8/SelfLoader.pm'
DB<2>
Notice that the keys are module names (with slashes instead of double-colons) and the values are filenames. You can then use the debugger's f command to switch files. After that, all of the code navigation commands work fine in the new file. Do a '.' to get back to where you were previously.
Edit:
Devel::Command::NewF extends the f command to automatically look up the module in %INC, translating the name for you from Whatever::It::Is to Whatever/It/Is.pm, and loading the module if it isn't found.
$ perl -de0
Patching with Devel::Command::DBSub::DB_5_8_5
Loading DB routines from perl5db.pl version 1.27
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1): 0
DB<1> fx Test::More
Loaded Test::More
auto(-1) DB<2> f /home/y/lib/perl5/5.8/i386-freebsd-thread-multi/Test
+/More.pm
1 package Test::More;
2
3: use 5.004;
4
5: use strict;
6
7
8 # Can't use Carp because it might cause use_ok() to accidentally
+ succeed9 # even though the module being used forgot to use Carp.
+ Yes, this
10 # actually happened.
DB<3>
|