DhMakePerl
view release on metacpan or search on metacpan
lib/Debian/Dependency.pm view on Meta::CPAN
=item parse()
Takes a single string argument and parses it.
Examples:
=over
=item perl
=item perl (>= 5.8)
=item libversion-perl (<< 3.4)
=back
=cut
sub parse {
my ( $class, $str ) = @_;
if( $str =~ /\|/ ) {
# alternative dependencies
return $class->new( {
alternatives => [
map { $class->new($_) } split( /\s*\|\s*/, $str )
],
} );
}
if ($str =~ m{
^ # start from the beginning
\s* # stray space
([^\(\s]+) # package name - no paren, no space
\s* # optional space
(?: # version is optional
\( # opening paren
( # various relations
<<
| <=
| =
| >=
| >>
| <
| >
)
\s* # optional space
(.+) # version
\) # closing paren
)?
\s* # optional space
(?: # architecture is optional
\[
(?:
!? # negation is optional
[^\s\]]+ # architecture name
(?:\s+|(?=\])) # whitespace or end
)+
\]
)?
(?: # "restriction formulas" (build profile) is optional
\s* # optional space
<
(?:
!? # negation is optional
[^\s>]+ # build profile name
(?:\s+|(?=>) ) # whitespace or end
)+
>
)* # can appear several times
$}x # done
)
{
return $class->new(
{ pkg => $1,
( ( defined($2) and defined($3) )
? ( rel => $2, ver => $3 )
: ()
)
}
);
}
else {
die "Unable to parse '$str'";
}
}
1;
=back
=head2 FIELDS
=over
=item pkg
Contains the name of the package that is depended upon
=item rel
Contains the relation of the dependency. May be any of '<<', '<=', '=', '>='
or '>>'. Default is '>='.
=item ver
Contains the version of the package the dependency is about. The value is an
instance of L<Dpkg::Version> class. If you set it to a scalar value, that is
given to L<Dpkg::Version>->new().
=back
C<rel> and C<ver> are either both present or both missing.
Examples
print $dep->pkg;
$dep->ver('3.4');
=head1 METHODS
( run in 0.541 second using v1.01-cache-2.11-cpan-437f7b0c052 )