ceo has asked for the wisdom of the Perl Monks concerning the following question:
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:
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!$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++; } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: 'extract' subs from source code
by toolic (Bishop) on Oct 24, 2012 at 14:29 UTC | |
Re: 'extract' subs from source code
by 2teez (Vicar) on Oct 24, 2012 at 13:28 UTC | |
by rovf (Priest) on Oct 24, 2012 at 13:56 UTC | |
Re: 'extract' subs from source code
by Anonymous Monk on Oct 24, 2012 at 13:16 UTC | |
Re: 'extract' subs from source code
by tobyink (Canon) on Oct 24, 2012 at 16:23 UTC | |
Re: 'extract' subs from source code
by NetWallah (Canon) on Oct 24, 2012 at 15:41 UTC | |
by chromatic (Archbishop) on Oct 24, 2012 at 16:36 UTC |
Back to
Seekers of Perl Wisdom