package MyConfig;
use strict;
use warnings;
=head1 NAME
MyConfig - Basic configuration data
=head1 DESCRIPTION
Configuration module.
=head1 METHODS
=head2 new()
Constructor.
=cut
sub new {
my ($class, $args) = @_;
return bless $args, $class;
}
=head1 API
Some description of API.
=begin apidoc
%basic = (
alpha => 'beta',
gamma => 'delta',
);
=end apidoc
More description of API.
=begin apidoc
%ordinary = (
epsilon => 'zeta',
eta => 'theta',
);
=end apidoc
=head1 SYSTEMS
Some description of systems.
=begin sysdoc
%bold = (
iota => 'kappa',
lambda => 'mu',
);
=end sysdoc
=cut
1;
####
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use Carp;
use Data::Dumper;$Data::Dumper::Indent=1;
{
package Local::Podparser;
use parent qw(Pod::Simple::PullParser);
our %begins = ();
sub _get_titled_section {
my $self = shift;
my @r;
$self->{_in_get_titled_section} = 1;
wantarray
? (@r = $self->SUPER::_get_titled_section(@_))
: ($r[0] = $self->SUPER::_get_titled_section(@_));
delete $self->{_in_get_titled_section};
wantarray ? @r : $r[0];
}
sub get_token {
my $self = shift;
my $str = '';
$self->{output_string} = \$str;
my $tok = $self->SUPER::get_token;
if (
!$self->{_in_get_titled_section} and
defined $tok and
$tok->[0] eq 'start' and
$tok->[1] eq 'for'
) {
my $target = $tok->[2]{"target"};
my $data;
until ($tok->[0] eq 'end' and $tok->[1] eq 'for') {
$data .= $tok->[1] if $tok->[0] eq 'text';
$tok = $self->SUPER::get_token;
}
push @{$begins{$target}}, $data;
$tok = $self->SUPER::get_token;
}
return $tok;
}
}
my $source = q{./MyConfig.pm};
croak "Could not locate '$source'" unless (-f $source);
my $parser = Local::Podparser->new;
$parser->set_source( $source );
$parser->accept_targets('apidoc', 'sysdoc');
while (my $token = $parser->get_token()) {
# cycle thru the tokens
}
say STDERR Dumper [ %Local::Podparser::begins ];
say "Finished";
####
$VAR1 = [
'sysdoc',
[
' %bold = (
iota => \'kappa\',
lambda => \'mu\',
);
'
],
'apidoc',
[
' %basic = (
alpha => \'beta\',
gamma => \'delta\',
);
',
' %ordinary = (
epsilon => \'zeta\',
eta => \'theta\',
);
'
]
];
Finished