рдмреБрдирд┐рдпрд╛рджреА рдкрд░реНрд▓ 5 рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдмреЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

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

MOP рдХреНрдпрд╛ рд╣реИ?


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

рдореВрд▓ рдкрд░реНрд▓ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕рднреА рдПрдордУрдкреА рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖ рдЧрдП:

no strict 'refs'; *{$foo . '::bar'} = \&baz; 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛ рд░рд┐рдХреЙрд░реНрдб рдЪрд░ $foo рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП bar рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ baz рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн (рдЙрдкрдирд╛рдо) рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╢рдмреНрдж рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рднреА рдЙрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдПрдордУрдкреА рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЕрд░реНрдз-рдЕрд╡реИрдз рд╣реИрдХрд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 class Foo { method bar { baz } } 

рдореБрдЭреЗ рдмреЗрд╕рд┐рдХ рдкрд░реНрд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдордУрдкреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


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

рдмреБрдирд┐рдпрд╛рджреА рдкрд░реНрд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдордУрдкреА рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛-рдореБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдУрдУрдкреА рдврд╛рдВрдЪреЗ рдХреЗ рдЯрдХрд░рд╛рд╡ рдореЗрдВ рд╕рднреА рдзрд╛рд░реНрдорд┐рдХ рдпреБрджреНрдзреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдордУрдкреА рдХреЛ use strict рд░реВрдк рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдЧрд╛ред

рдореВрд▓ рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП рдПрдордУрдкреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдПрдХ рд╣реА рдореВрд╕ рдХрднреА рднреА рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдордУрдкреА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рд░ рдореМрдХрд╛ рд╣реИред

рдПрдХ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реБрдВрджрд░ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╡рд╕реНрддреБ рдкреНрд░рдгрд╛рд▓реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЕрдкрдиреА рдЧрдВрднреАрд░рддрд╛ рдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рднреА рдУрдУрдкреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдХреА, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ (рдПрдХрд▓ рд╢реИрд▓реА) , рд╕рд░рд▓реАрдХреГрдд рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг)ред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд░реНрд▓ рдХреЛ рдпреБрд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рджрдЧреА рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдордУрдкреА рдкрд░реНрд▓ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░реНрд▓ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реАрдорд╛ рд╣реЛрдЧреА: рдПрдордУрдкреА рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВред

рд╡рд┐рдХрд╛рд╕ mop


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

рдХреБрдЫ рд╕рдордп рдмреАрдд рдЧрдпрд╛ рдФрд░ рд╕реНрдЯреАрдлрди рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА p5-mop рдХреЛ рджреВрд╕рд░рд╛ рдореМрдХрд╛ рджреЗрдирд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ p5-mop-redux рдмрдирд╛рдпрд╛ рд╣реИ , рдЬрд┐рд╕рдиреЗ рдЕрдорд░рддрд╛ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдФрд░ рдореЛрд╕ рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╕рд┐рдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдмрди рдЧрдпрд╛ред рдкрд░реНрд▓ рдХрд╛ рдореВрд▓ред

рд╕реНрдЯреАрдлрди рдиреЗ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рдЧрддрд┐ рдкрд░ рд░рдЦрд╛ рдФрд░ рдмреНрд▓реЙрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо blogs.perl.org рдкрд░ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдПред 15 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ CPAN рдкрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреЛ рд╕рдХреНрд░рд┐рдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ: рд╕реНрдЯреАрд╡рди рд▓рд┐рдЯрд┐рд▓ рдФрд░ рдЬреЗрд╕реА рд▓реБрд╣рд░реНрд╕ , рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрдИ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ред

рдПрдордУрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рд╕реНрдерд╛рдкрдирд╛

рдПрдордУрдкреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк cpanm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $ cpanm --dev mop 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдордУрдкреА рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рдирдИ рдкрд░реНрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрд▓ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 5.16 рд╣реИред

рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг

рдПрдордУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдореВрдирд╛ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 use mop; class Point { has $!x is ro = 0; has $!y is ro = 0; method clear { ($!x, $!y) = (0,0); } } 

class рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Point рдХреНрд▓рд╛рд╕ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЪрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЧрд┐рд▓ (рджреЛ рдпрд╛ рджреЛ-рдЪрд░рд┐рддреНрд░ рд╡рд╛рд▓реЗ рд╕рдЬрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реНрд▓ 6 рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЯреНрд╡реАрдбрд▓ $! рд╕рд╛рде рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ $! рдЬреЛ рдирд┐рдЬреА рдЧреБрдг рд╣реИрдВред

рдЯреНрд╡рд┐рдЧрд▓ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рдмрд╛рдж, рдЧреБрдг ( рд▓рдХреНрд╖рдг ) рдХрд╛ рд╡рд░реНрдгрди рдХреАрд╡рд░реНрдб is рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ is ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ro рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╕рдорд╛рди рд╕рдВрдХреЗрдд рдХреЗ рдмрд╛рдж, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Point рд╡рд░реНрдЧ рдПрдХ рдПрдХрд▓ clear рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдиреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд░реНрдЧ $!x , $!y рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рднреАрддрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 class Point3D extends Point { has $!z is ro = 0; method clear { $self->next::method; $!z = 0 } } 

рдпрд╣ Point3D рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Point3D extends рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЙрдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рдВрд╢рдЬ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧ Point рд╡рд░реНрдЧ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИред рдЙрдирдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реЗрд╖рддрд╛ $!z рд╡рд░реНрдЧ рдореЗрдВ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИред clear рд╡рд┐рдзрд┐ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, next::method рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Point рдХреНрд▓рд╛рд╕ рд╕реЗ рдЕрдЧрд▓реА (рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо) рдкреИрд░реЗрдВрдЯ clear рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд░ $self рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред

рдпрджрд┐ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рд╡рд░реНрдЧ mop::object рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 print Dumper mro::get_linear_isa(ref Point->new); $VAR1 = [ 'Point', 'mop::object' ]; 

рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдг рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 my $point = Point->new( x => 1, y => 1); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ Point рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП new рд╡рд┐рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ mop::object рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред

рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреЗрдЯрд░ рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 my $point = Point->new( x => 1, y => 1); print $point->x 

рдорд╛рди 1 рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ ro рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛:

 $point->x(2); Cannot assign to a read-only accessor 

рдлрд┐рд░ рднреА, рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк set_x рд╕реЗрдЯрд░ set_x рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 class Point { has $!x is ro = 0; ... method set_x( $x=10 ) { $!x = $x } } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рдЪрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ рдпрджрд┐ рддрд░реНрдХ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 $point->set_x(5); # $!x  5 $point->set_x; # $!x  10 

рдЗрд╕реА рд╕рдордп, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреЗрд╡рд▓ рдкреЙрдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЧреБрдВрдЬрд╛рдЗрд╢ рдореЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╣рдо рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдореЗрдВ рд╕реАрдзреЗ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

 class Point3D extends Point{ ... method set_x_broken { $!x = 10; } } 

рдпрд╣ No such twigil variable $!x рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЛ No such twigil variable $!x рджреЗрдЧрд╛: No such twigil variable $!x

рднреВрдорд┐рдХрд╛


рд░реЛрд▓реНрд╕ рдЖрдкрдХреЛ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

 role BlackJack { method win; method loose ($value) { not $self->win($value) } } 

рдпрд╣ рднреВрдорд┐рдХрд╛ рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ win рдФрд░ loose ред win рд╡рд┐рдзрд┐ рдореЗрдВ рд╢рд░реАрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЙрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рднреВрдорд┐рдХрд╛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЕрдм рдХрдХреНрд╖рд╛ рдХреЛ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 class LunaPark with BlackJack { method win ($value){ 0 } } 

рдПрдХ рд╡рд░реНрдЧ рдХрдИ рднреВрдорд┐рдХрд╛рдУрдВ рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреВрдорд┐рдХрд╛ рдХреЗ рдирд╛рдо рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред

рдЧреБрдг рдФрд░ рдореВрд▓реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ


 has $!foo is rw, lazy = 0 

рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рдЧреБрдг рдЧреБрдг рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:



рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдХреЗрдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╣реИ, рдЕрд░реНрдерд╛рддред рд░рд┐рдХреЙрд░реНрдб:

 has $!foo = "value" 

рдорд╛рдзреНрдпрдо
 has $!foo = sub { "value" } 

рдпрд╛рдиреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдЖрдк $ _ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрддрдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 has $!foo = $_->set_foo() 

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА new рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 has $!foo = die '$!foo is required'; 

рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп foo рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред

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

 sub type { #     ... } class foo { has $!bar is rw, type('Int'); method baz ($a, $b) is type('Int', 'Int') { ... } } 

рдПрдордУрдкреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ type рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг


рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:

 package Figures; use strict; use warnings; use mop; our $debug = 1; sub debug { print STDERR "@_\n" if $debug; } class Point { has $!data is ro; method draw_point { debug("draw point") } method BUILD { $!data = "some data"; } method DEMOLISH { undef $!data; } } class Point3D extends Figures::Point {} my $point = Figures::Point3D->new; $point->draw_point; 

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

рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рд╢реЗрд╖ BUILD рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ new рдкрджреНрдзрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

DEMOLISH рд╡рд┐рдзрд┐ DEMOLISH рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╣реИред

рдПрдордУрдкреА рдореЗрдВ рд╡рд╕реНрддреБ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛


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



рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ


рдПрдордУрдкреА рдореЙрдбреНрдпреВрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЦреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЗрдиреЗ рдФрд░ рдПрдордУрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдХрд┐рди рдЧрд▓рддрд┐рдпреЛрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ? рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд▓реИрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рднреА 1152 рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

рдЕрдм рдпрд╣ рдХрд╣рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрд░ рдкрд░реНрд▓ рд╡рд┐рддрд░рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдордУрдкреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЗрд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ: 5.20, 5.22 рдпрд╛ рдмрд╛рдж рдореЗрдВ? рдпрд╣ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдШрдЯрдирд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреГрд╖реНрдарднреВрдорд┐ рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рд╣реИред

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


  1. рдкрд░реНрд▓ 5 рдПрдордУрдкреА рд╕реНрдЯрд╡рд╛рди рд▓рд┐рдЯрд┐рд▓ рджреНрд╡рд╛рд░рд╛
  2. "рдХреНрдпреЛрдВ рдкрд░реНрд▓ 5 рдХреЛ рд░рдВрдЧреАрди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдореЗрдЯрд╛рдмреЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"
  3. "рдкреА 5-рдПрдордУрдкреА, рдПрдХ рд╕реМрдореНрдп рдкрд░рд┐рдЪрдп" рдбреЗрдорд┐рдпрди рджреНрд╡рд╛рд░рд╛ "рдмрд╛рдВрдз" рдХреНрд░реЛрдЯрдХрд╛рдЗрди
  4. рдПрдордУрдкреА рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд▓реЗрдЦрди
  5. рд╕реНрдЯреАрд╡рди рд▓рд┐рдЯрд┐рд▓ рджреНрд╡рд╛рд░рд╛ "рдПрдордУрдкреА рдХреЛ рдирдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░рдг"
  6. "рдж рдЖрд░реНрдЯ рдСрдл рдж рдореЗрдЯрд╛рдмреЙрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓" рдПрдПрдордУрдкреА

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


All Articles