Hello Perlmonks,
I seek your great wisdom!
I need to extract the code and the names of subs from scripts. So I searched CPAN, but when I found nothing, I wrote this quickly:
$moduleText = shift;
my %subs = ();
my @splitted = split(/([\{\}])/, $moduleText);
my %subPrototypes = ();
my $brackets = 0;
my $pos = 0;
while ($pos <= $#splitted) {
if($splitted[$pos] =~ /sub (.+?)\s{1,}(\(.+?\)){0,1}\s*/) {
$pos += 1;
my $this_sub = $1;
$subPrototypes{$this_sub} = $2 if $2;
while ($pos <= $#splitted) {
if($splitted[$pos]) {
$brackets++ if($splitted[$pos] eq "{");
$brackets-- if($splitted[$pos] eq "}");
}
$subs{$this_sub} .= $splitted[$pos];
if($brackets <= 0) {
last;
}
$pos++;
}
} else {
$pos++;
}
}
And it works OK in most situations. But there are some special situations like in strings (" and ' could easily been done, but q and qq and ... are really hard to realize) and so on, where you can put opening and closing brackets without effect to the logic of the script itself.
So... as I know: Only perl can parse Perl, but ain't there really any other way to do that?
Maybe someone has an idea?
Any help would be greatly appreciated!
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.