This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
f61286ea549b8d5aa88f86a207906add66bceb11
[perl5.git] / cpan / Module-Build / lib / Module / Build / PodParser.pm
1 package Module::Build::PodParser;
2
3 use strict;
4 use vars qw($VERSION);
5 $VERSION = '0.4008';
6 $VERSION = eval $VERSION;
7 use vars qw(@ISA);
8
9 sub new {
10   # Perl is so fun.
11   my $package = shift;
12
13   my $self;
14   @ISA = ();
15   $self = bless {have_pod_parser => 0, @_}, $package;
16
17   unless ($self->{fh}) {
18     die "No 'file' or 'fh' parameter given" unless $self->{file};
19     open($self->{fh}, '<', $self->{file}) or die "Couldn't open $self->{file}: $!";
20   }
21
22   return $self;
23 }
24
25 sub parse_from_filehandle {
26   my ($self, $fh) = @_;
27
28   local $_;
29   while (<$fh>) {
30     next unless /^=(?!cut)/ .. /^=cut/;  # in POD
31     # Accept Name - abstract or C<Name> - abstract
32     last if ($self->{abstract}) = /^ (?: [a-z_0-9:]+ | [BCIF] < [a-z_0-9:]+ > ) \s+ - \s+ (.*\S) /ix;
33   }
34
35   my @author;
36   while (<$fh>) {
37     next unless /^=head1\s+AUTHORS?/i ... /^=/;
38     next if /^=/;
39     push @author, $_ if /\@/;
40   }
41   return unless @author;
42   s/^\s+|\s+$//g foreach @author;
43
44   $self->{author} = \@author;
45
46   return;
47 }
48
49 sub get_abstract {
50   my $self = shift;
51   return $self->{abstract} if defined $self->{abstract};
52
53   $self->parse_from_filehandle($self->{fh});
54
55   return $self->{abstract};
56 }
57
58 sub get_author {
59   my $self = shift;
60   return $self->{author} if defined $self->{author};
61
62   $self->parse_from_filehandle($self->{fh});
63
64   return $self->{author} || [];
65 }