/usr/share/perl5/MooseX/Types/Perl.pm is in libmoosex-types-perl-perl 0.101343-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | package MooseX::Types::Perl;
# ABSTRACT: Moose types that check against Perl syntax
$MooseX::Types::Perl::VERSION = '0.101343';
use MooseX::Types -declare => [ qw(
DistName
ModuleName
PackageName
Identifier
SafeIdentifier
LaxVersionStr
StrictVersionStr
VersionObject
) ];
# =head1 SYNOPSIS
#
# use MooseX::Types::Perl qw(
# DistName
#
# ModuleName
# PackageName
#
# Identifier
# SafeIdentifier
#
# LaxVersionStr
# StrictVersionStr
# VersionObject
# );
#
# =head1 DESCRIPTION
#
# This library provides L<Moose types|MooseX::Types> for checking things (mostly
# strings) against syntax that is, or is a reasonable subset of, Perl syntax.
#
# =cut
use MooseX::Types::Moose qw(Object Str);
use Params::Util qw(_CLASS);
use version 0.82;
# =head1 TYPES
#
# =head2 ModuleName
#
# =head2 PackageName
#
# These types are identical, and expect a string that could be a package or
# module name. That's basically a bunch of identifiers stuck together with
# double-colons. One key quirk is that parts of the package name after the
# first may begin with digits.
#
# The use of an apostrophe as a package separator is not permitted.
#
# =cut
subtype ModuleName, as Str, where { ! /\P{ASCII}/ && _CLASS($_) };
subtype PackageName, as Str, where { ! /\P{ASCII}/ && _CLASS($_) };
# =head2 DistName
#
# The DistName type checks for a string like C<MooseX-Types-Perl>, the sort of
# thing used to name CPAN distributions. In general, it's like the more familiar
# L<ModuleName>, but with hyphens instead of double-colons.
#
# In reality, a few distribution names may not match this pattern -- most
# famously, C<CGI.pm> is the name of the distribution that contains CGI. These
# exceptions are few and far between, and deciding what a C<LaxDistName> type
# would look like has not seemed worth it, yet.
#
# =cut
subtype DistName,
as Str,
where {
return if /:/;
(my $str = $_) =~ s/-/::/g;
$str !~ /\P{ASCII}/ && _CLASS($str)
},
message {
/::/
? "$_ looks like a module name, not a dist name"
: "$_ is not a valid dist name"
};
# LaxDistName -- how does this work, other than "like some characters, okay?"
# =head2 Identifier
#
# An L<Identifier|perldata/Variable names> is something that could be used as a
# symbol name or other identifier (filehandle, directory handle, subroutine name,
# format name, or label). It's what you put after the sigil (dollar sign, at
# sign, percent sign) in a variable name. Generally, it's a bunch of
# alphanumeric characters not starting with a digit.
#
# Although Perl identifiers may contain non-ASCII characters in some
# circumstances, this type does not allow it. A C<UnicodeIdentifier> type may be
# added in the future.
#
# =cut
subtype Identifier,
as Str,
where { / \A [_a-z] [_a-z0-9]* \z /xi; };
# =head2 SafeIdentifier
#
# SafeIdentifiers are just like Identifiers, but omit the single-letter variables
# underscore, a, and b, as these have special significance.
#
# =cut
subtype SafeIdentifier,
as Identifier,
where { ! / \A [_ab] \z /x; };
# =head2 LaxVersionStr
#
# =head2 StrictVersionStr
#
# Lax and strict version strings use the L<is_lax|version/is_lax> and
# L<is_strict|version/is_strict> methods from C<version> to check if the given
# string would be a valid lax or strict version. L<version::Internals> covers
# the details but basically: lax versions are everything you may do, and strict
# omit many of the usages best avoided.
#
# =cut
subtype LaxVersionStr,
as Str,
where { version::is_lax($_) },
message { "$_ is not a valid lax version string" };
subtype StrictVersionStr,
as LaxVersionStr,
where { version::is_strict($_) },
message { "$_ is not a valid strict version string" };
# =head2 VersionObject
#
# Just for good measure, this type is included to check if a value is a version
# object. Coercions from LaxVersionStr (and thus StrictVersionStr) are provided.
#
# =cut
subtype VersionObject,
as Object,
where { $_->isa('version') };
coerce VersionObject,
from LaxVersionStr,
via { version->parse($_) };
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
MooseX::Types::Perl - Moose types that check against Perl syntax
=head1 VERSION
version 0.101343
=head1 SYNOPSIS
use MooseX::Types::Perl qw(
DistName
ModuleName
PackageName
Identifier
SafeIdentifier
LaxVersionStr
StrictVersionStr
VersionObject
);
=head1 DESCRIPTION
This library provides L<Moose types|MooseX::Types> for checking things (mostly
strings) against syntax that is, or is a reasonable subset of, Perl syntax.
=head1 TYPES
=head2 ModuleName
=head2 PackageName
These types are identical, and expect a string that could be a package or
module name. That's basically a bunch of identifiers stuck together with
double-colons. One key quirk is that parts of the package name after the
first may begin with digits.
The use of an apostrophe as a package separator is not permitted.
=head2 DistName
The DistName type checks for a string like C<MooseX-Types-Perl>, the sort of
thing used to name CPAN distributions. In general, it's like the more familiar
L<ModuleName>, but with hyphens instead of double-colons.
In reality, a few distribution names may not match this pattern -- most
famously, C<CGI.pm> is the name of the distribution that contains CGI. These
exceptions are few and far between, and deciding what a C<LaxDistName> type
would look like has not seemed worth it, yet.
=head2 Identifier
An L<Identifier|perldata/Variable names> is something that could be used as a
symbol name or other identifier (filehandle, directory handle, subroutine name,
format name, or label). It's what you put after the sigil (dollar sign, at
sign, percent sign) in a variable name. Generally, it's a bunch of
alphanumeric characters not starting with a digit.
Although Perl identifiers may contain non-ASCII characters in some
circumstances, this type does not allow it. A C<UnicodeIdentifier> type may be
added in the future.
=head2 SafeIdentifier
SafeIdentifiers are just like Identifiers, but omit the single-letter variables
underscore, a, and b, as these have special significance.
=head2 LaxVersionStr
=head2 StrictVersionStr
Lax and strict version strings use the L<is_lax|version/is_lax> and
L<is_strict|version/is_strict> methods from C<version> to check if the given
string would be a valid lax or strict version. L<version::Internals> covers
the details but basically: lax versions are everything you may do, and strict
omit many of the usages best avoided.
=head2 VersionObject
Just for good measure, this type is included to check if a value is a version
object. Coercions from LaxVersionStr (and thus StrictVersionStr) are provided.
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|