Aion
view release on metacpan or search on metacpan
lib/Aion/Types.md view on Meta::CPAN
'+23456789' ~~ Tel # -> 1
'+234567890' ~~ Tel # -> 1
'+23456789' ~~ (Tel & Len[9]) # -> 1
'+234567890' ~~ (Tel & Len[9]) # -> ""
['+23456789', '+23456789'] ~~ IntOrArrayRef[9, Tel] # -> 1
['+234567890', '+23456789'] ~~ IntOrArrayRef[9, Tel] # -> ""
"" ~~ IntOrArrayRef[8, Tel] # -> ""
coerce IntOrArrayRef[35, Str], from Num, via { int($_ + .5) };
IntOrArrayRef([35, Str])->coerce(5.5) # => 6
5.5 >> IntOrArrayRef[35, Str] # => 6
(Tel & Len[9]) < (Tel & Len[10]) # => 1
```
# DESCRIPTION
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑкÑпоÑÑиÑÑÐµÑ Ð¿Ð¾Ð´Ð¿ÑогÑаммÑ:
* `subtype`, `as`, `init_where`, `where`, `awhere`, `message` â Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑов.
* `SELF`, `ARGS`, `A`, `B`, `C`, `D`, `M`, `N` â Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² валидаÑоÑаÑ
Ñипа и его аÑгÑменÑов.
* `coerce`, `from`, `via` â Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ð²ÐµÑÑоÑа знаÑений из одного клаÑÑа в дÑÑгой.
ÐеÑаÑÑ
Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑов:
```text
Any
Control
Union[A, B...]
Intersection[A, B...]
Exclude[A...]
Option[A]
Wantarray[A, B]
Item
External[type]
Bool
BoolLike
Enum[e...]
Maybe[A]
Undef
Defined
Value
Version
Str
Uni
Bin
NonEmptyStr
StartsWith[start]
EndsWith[end]
Email
Tel
Url
Path
Html
StrDate
StrDateTime
StrMatch[regexp]
PackageName
ClassName
RoleName
Join[separator]
Split[separator]
StrRat
Num
PositiveNum
Int
PositiveInt
Nat
Ref
Tied`[class]
LValueRef
FormatRef
CodeRef
NamedCode[subname]
ProtoCode[prototype]
ForwardRef
ImplementRef
Isa[A...]
RegexpRef
ValueRef`[A]
ScalarRef`[A]
RefRef`[A]
GlobRef
FileHandle
ArrayRef`[A]
Tuple[A...]
CycleTuple[A...]
HashRef`[A]
Map[A => B]
Dict[k => A, ...]
Object`[class]
Me
Rat
RegexpLike
CodeLike
ArrayLike`[A]
Lim[from?, to]
HashLike`[A]
HasProp[p...]
LimKeys[from?, to]
Like
HasMethods[m...]
Overload`[m...]
InstanceOf[class...]
ConsumerOf[role...]
StrLike
Len[from?, to]
NumLike
Range[from, to]
Float
Double
Bytes[n]
PositiveBytes[n]
```
# SUBROUTINES
lib/Aion/Types.md view on Meta::CPAN
## Email
СÑÑоки Ñ `@`.
```perl
'@' ~~ Email # -> 1
'a@a.a' ~~ Email # -> 1
'a.a' ~~ Email # -> ""
```
## Tel
ФоÑÐ¼Ð°Ñ ÑелеÑонов â знак плÑÑ Ð¸ ÑÐµÐ¼Ñ Ð¸Ð»Ð¸ болÑÑе ÑиÑÑ.
```perl
"+1234567" ~~ Tel # -> 1
"+1234568" ~~ Tel # -> 1
"+ 1234567" ~~ Tel # -> ""
"+1234567 " ~~ Tel # -> ""
```
## Url
URL-адÑеÑа веб-ÑайÑов â ÑÑо ÑÑÑока Ñ Ð¿ÑеÑикÑом http:// или https://.
```perl
"http://" ~~ Url # -> 1
"http:/" ~~ Url # -> ""
```
## Path
ÐÑÑи наÑинаÑÑÑÑ Ñ ÐºÐ¾Ñой ÑеÑÑÑ.
```perl
"/" ~~ Path # -> 1
"/a/b" ~~ Path # -> 1
"a/b" ~~ Path # -> ""
```
## Html
HTML наÑинаеÑÑÑ Ñ `<!doctype html` или `<html`.
```perl
"<HTML" ~~ Html # -> 1
" <html" ~~ Html # -> 1
" <!doctype html>" ~~ Html # -> 1
" <html1>" ~~ Html # -> ""
```
## StrDate
ÐаÑа в ÑоÑмаÑе `yyyy-mm-dd`.
```perl
"2001-01-12" ~~ StrDate # -> 1
"01-01-01" ~~ StrDate # -> ""
```
## StrDateTime
ÐаÑа и вÑÐµÐ¼Ñ Ð² ÑоÑмаÑе `yyyy-mm-dd HH:MM:SS`.
```perl
"2012-12-01 00:00:00" ~~ StrDateTime # -> 1
"2012-12-01 00:00:00 " ~~ StrDateTime # -> ""
```
## StrMatch[regexp]
СопоÑÑавлÑÐµÑ ÑÑÑÐ¾ÐºÑ Ñ ÑегÑлÑÑнÑм вÑÑажением.
```perl
' abc ' ~~ StrMatch[qr/abc/] # -> 1
' abbc ' ~~ StrMatch[qr/abc/] # -> ""
```
## ClassName
ÐÐ¼Ñ ÐºÐ»Ð°ÑÑа â ÑÑо Ð¿Ð°ÐºÐµÑ Ñ Ð¼ÐµÑодом `new`.
```perl
'Aion::Type' ~~ ClassName # -> 1
'Aion::Types' ~~ ClassName # -> ""
```
## RoleName
ÐÐ¼Ñ Ñоли â ÑÑо Ð¿Ð°ÐºÐµÑ Ð±ÐµÐ· меÑода `new`, Ñ `@ISA` или Ñ Ð¾Ð´Ð½Ð¸Ð¼ лÑбÑм меÑодом.
```perl
package ExRole1 {
sub any_method {}
}
package ExRole2 {
our @ISA = qw/ExRole1/;
}
'ExRole1' ~~ RoleName # -> 1
'ExRole2' ~~ RoleName # -> 1
'Aion::Type' ~~ RoleName # -> ""
'Nouname::Empty::Package' ~~ RoleName # -> ""
```
## StrRat
СÑÑоковое пÑедÑÑавление ÑаÑионалÑнÑÑ
ÑиÑел.
Так как в perl ÑаÑионалÑнÑе ÑиÑла поддеÑживаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑÐ°Ð³Ð¼Ñ `bigrat`, коÑоÑÑй вÑе ÑаÑионалÑнÑе ÑиÑла пÑевÑаÑÐ°ÐµÑ Ð² `Math::BigRat`, Ñо иÑполÑзÑеÑ...
```perl
"6/7" ~~ StrRat # -> 1
"-6/7" ~~ StrRat # -> 1
"+6/7" ~~ StrRat # -> 1
6 ~~ StrRat # -> 1
"inf" ~~ StrRat # -> 1
"+Inf" ~~ StrRat # -> 1
"NaN" ~~ StrRat # -> 1
"-nan" ~~ StrRat # -> 1
6.5 ~~ StrRat # -> 1
"6.5 " ~~ StrRat # -> ''
```
## Rat
( run in 1.211 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )