$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++; } }