Given a Perl package Foo.pm, e.g.
package Foo;
use strict;
sub bar {
# some code here
}
sub baz {
# more code here
}
1;
How can I write a script to extract the textual source code for each sub, resulting in a hash:
$VAR1 = {
'bar' => 'sub bar {
# some code here
}',
'baz' => 'sub baz {
# more code here
}'
};
I'd like to have the text exactly as it appears in the package, whitespace and all.
Thanks.
PPI is kind of a pain to work with at the very first; the documentation is not good at telling you which class documents which methods shown in the examples. But it works pretty well:
Take a look at the PPI module.
First you need to find out, what package the subroutine resulted from. The book Perl Hacks in Hack #58 'Find a Subroutine's Source' recommends module
Sub::Identify
.This will print the package, the sub is coming from.
Hack #55 'Show Source Code on Errors' shows how to retrieve the source code based on line numbers (from error and warning messages). The code examples can be found here: example code