Perl6 - рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ

1. Perl6 рдореЗрдВ рдЪрд░ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
2. рдкрд░реНрд▓ 6 - рдЪрд░, рдЕрдирд╛рдо рдмреНрд▓реЙрдХреЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди
3. рдкрд░реНрд▓ 6 - рд╕рд╢рд░реНрдд рдХрдерди, рд▓реВрдк
4. рдкрд░реНрд▓ 6 - рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
5. рдкрд░реНрд▓ 6 - рдХрдХреНрд╖рд╛рдПрдВ
6. рдкрд░реНрд▓ 6 - рдЖрдИ / рдУ рдореЙрдбреНрдпреВрд▓
7. рдкрд░реНрд▓ 6 - рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд╢реНрд╡реЗрдд рд╕реНрдерд╛рди, рдХреЛрд╖реНрдардХ
рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рд╕рдВрдЦреНрдпрд╛ 4) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдерд╛ред рдЕрдм рдореИрдВ рдЙрдирдХреА рдХрд┐рд╕реНрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдСрдкрд░реЗрдЯрд░реЛрдВред


рд╢рд╛рдпрдж рд╣рдо infix рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВрдЧреЗ:
Infix рдСрдкрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг '+' рдСрдкрд░реЗрдЯрд░ рд╣реИ
sub infix:<MyNewOperator> (Int $a, Str $b) { return "Call: $a + $b"; } say 10 MyNewOperator "abc"; 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рджреЗрдЦреЗрдВрдЧреЗ
 Call: 10 + abc 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдСрдкрд░реЗрдЯрд░ рдирд╛рдореЛрдВ рдореЗрдВ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реА ++ рдореЗрдВ рд╣реИ - рд╣рдо рдХреЗрд╡рд▓ "MyNewOperator" рдХреЛ '+' рдореЗрдВ рдмрджрд▓рдХрд░ рдирдП рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рджреЛ рддрд╛рд░реЛрдВ рдХреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЧреНрд▓реВрдЗрдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ infix рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
 sub infix:<MyNewOperator> (Int $a, Str $b, $c) { return "Call: $a + $b, $c"; } say infix:<MyNewOperator>(1, "abc", 5); 

рдореИрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд┐рдВрджреБ рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдкреИрд░рд╛рдореАрдЯрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░" рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЪрд▓реЛ рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - рдЙрдкрд╕рд░реНрдЧред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд╖реЗрдз рдСрдкрд░реЗрдЯрд░ рд╣реИ '!' рдЬрд┐рд╕реЗ рд╣рдо рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рджреЗрддреЗ рд╣реИрдВ
 sub prefix:<!> (Int $a) { return "Call: prefix ! $a"; } say !1; 

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдлрд┐рд░ рд╕реЗ, рд╣рдо рдореМрдЬреВрджрд╛ рдЙрдкрд╕рд░реНрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдирд╛рдо рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рднреА рдСрдкрд░реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред ', рдЬрд┐рд╕рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрджрдд рдореЗрдВ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдкреИрджрд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░, рдореИрдВрдиреЗ рдХрд╣реАрдВ рдкрдврд╝рд╛ рдПрдХ рдХреЙрдорд┐рдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рднреА рдпрд╛рдж рдХрд┐рдпрд╛: "рдкрд░реНрд▓ 6 рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ, рдмреНрд▓реЙрдХреЛрдВ, рд╕рдм рдХреБрдЫ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рднрд╛рд░ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛"ред рдПрдХ рд╢реБрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдордЬрд╛рдХ, рд▓реЗрдХрд┐рди рдЙрдкрд╕рд░реНрдЧ рдСрдкрд░реЗрдЯрд░ рдбреЙрдЯ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ =)

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ - рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ:
рдлрд┐рд░, рдореБрдЭреЗ рдЫреЛрдЯреЗ рдкреНрд░рд┐рдВрдЯ рдФрд░ рдПрдХ рдмреИрдВрдХ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд▓реЗрдЦ рдпрд╛рдж рдЖрдпрд╛:
 sub postfix:<*> (Int $a) { return "See $a paragraph in document A"; } say "We can give you \$1_000_000 just for lulz!"; say 1*; 


рдирддреАрдЬрддрди, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ
 We can give you $1_000_000 just for lulz! See 1 paragraph in document A 


рдлрд┐рд░ рд╕реЗ, рд╕рднреА рдкреВрд░реНрд╡рд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдСрдкрд░реЗрдЯрд░ рдирд╛рдореЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдСрдкрд░реЗрдЯрд░ рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рдСрдкрд░реЗрдВрдб рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдЪреБрдирддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рди рд╣реЛрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдФрд░ рд╕рдорд╛рди рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ '*' рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рддреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдХреАрд╡рд░реНрдб 'рдорд▓реНрдЯреА' рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдо рдЕрдЧрд▓реА рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ - рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЛрд╖реНрдардХ:
 sub circumfix:<(( ))> (Int $a) { return "<$a>"; } say ((1)); 


рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
 <1> 


рд▓реЗрдХрд┐рди "рдирдП" рдХреЛрд╖реНрдардХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рд╕рдордЭрджрд╛рд░реА рди рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рддрдм рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖрдкрдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЬрд╛рдПрдБрдЧреЗ - "рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдмреНрд░реИрдХреЗрдЯреНрд╕"
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореБрдЭреЗ рдПрдХ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рддрд╛рд░ рдореЗрдВ рдмрд╕ рдРрд╕реА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдФрд░ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдорд┐рд▓реЗ, рд╡реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗред рдЗрд╕рд╕реЗ, рдореИрдВ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрднреА рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рддрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕рдВрдХрд▓рдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЬрд╛рдВрдЪ рджреЗрдЦреА:
 sub Func($a) of Int { return $a; } 

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдВрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдПрдХ рдлреНрд░реИрдХреНрд╢рдирд▓ рдорд╛рдиред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдерд╛, рддрдм рдпрд╣ рдлреАрдЪрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдЗрд╕ рдкрд░ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In190186/


All Articles