рдкрд░реНрд▓ :: рдЖрд▓реЛрдЪрдирд╛ + рддреЛрдбрд╝рдлреЛрдбрд╝ = рдПрдХ рдЯреАрдо рдореЗрдВ рдЖрдо рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

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

2005 рдореЗрдВ, рдкрд░реНрд▓ рд╕рдореБрджрд╛рдп рдХреЗ рдПрдХ рд╕рдХреНрд░рд┐рдп рд╕рджрд╕реНрдп рдбреЗрдорд┐рдпрди рдХреЙрдирд╡реЗ рдиреЗ рдкрд░реНрд▓ рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕реЗрд╕ рдмреБрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА, рдЬрд┐рд╕рдореЗрдВ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рдорд░реНрдерд┐рдд рдкрд░реНрд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 256 рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдПрдХрддреНрд░рд┐рдд рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХреА рдЧрдИрдВред рдПрдХ рдХрд┐рддрд╛рдм рд╕реЗ рдирд┐рдЪреЛрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдзреЛрдЦрд╛ рд╢реАрдЯ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

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

рдкрд░реНрд▓ :: рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реЙрд╕ рдХреЗ рддрд╣рдд рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╣реА рдирд╛рдо рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ - perlcritic, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкрд░реАрдХреНрд╖рдг :: рдкрд░реНрд▓ :: рдЖрд▓реЛрдЪрдХ рдпрд╛ рдЯреЗрд╕реНрдЯ # рдкрд░реНрд▓ :: рдЖрд▓реЛрдЪрдХ :: рдкреНрд░рдЧрддрд┐рд╢реАрд▓ , рддреАрд╕рд░реА рдмрд╛рдд, рдЖрд▓реЛрдЪрдХ рдЖрд╕рд╛рдиреА рд╕реЗ VIM рдФрд░ Emacs рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред

рдЗрд╕ рдиреБрд╕реНрдЦрд╛ рдореЗрдВ, рдореИрдВ рдПрдХ рддреЛрдбрд╝рдлреЛрдбрд╝ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рдкрд░ рдлреНрд▓рд╛рдИ рдкрд░ рдкрд░реНрд▓ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдмреЛрди рдПрдкреЗрдЯрд┐рдЯ!



рддреЛрдбрд╝рдлреЛрдбрд╝ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рддрдВрддреНрд░


рдХрдИ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рддрд░рд╣, рддреЛрдбрд╝рдлреЛрдбрд╝, рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЪрд░рдгреЛрдВ рдореЗрдВ рдордирдорд╛рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рддреЛрдбрд╝рдлреЛрдбрд╝ рдореЗрдВ рдПрдХ pre-commit рдЯреНрд░рд┐рдЧрд░ (рд╣реБрдХ) рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрдд рдореЗрдВ рднрдВрдбрд╛рд░ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕реА рдирд╛рдо рдХреА рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рддреЛрдбрд╝рдлреЛрдбрд╝ hooks/ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрддрдорд╛рди рд▓реЗрдирджреЗрди рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреА рд╣реИ: рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рдЬреЛрдбрд╝реА рдЧрдИрдВ, рд╣рдЯрд╛ рджреА рдЧрдИрдВ, рдмрджрд▓ рдЧрдИрдВ, рдирдИ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЕрдВрддрд░ рдХрд░реЗрдВ, рдЖрджрд┐ред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рдЖрдк svnlook рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдпрд╛ SVN :: рд▓реБрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ pre-commit рд╣реБрдХ 0 рджреЗрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдВрдкреВрд░реНрдг рд▓реЗрдирджреЗрди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдиреА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, STDERR рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ svn-client рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, Perl::Critic pre-commit рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ Perl::Critic рдХрд░рдХреЗ, рдЖрдк рдЙрд▓реНрд▓рдВрдШрди рдХреЛрдб рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХ


1. рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ perlcritic-checker.pl рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

 wget http://perlcritic-checker.googlecode.com/files/perlcritic-checker-1.2.6.tar.gz
 tar -xzf perlcritic-checker-1.2.6.tar.gz
 рд╕реАрдбреА рдкрд░реНрдХреНрд▓рдХреНрд░рд┐рдЯрд┐рдХ-рдЪреЗрдХрд░-1.2.6
 perl ./Makefile.PL
 рдореЗрдХрдЕрдк
 рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
 рд╕реБрдбреЛрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдкреНрд░рд▓реЗрдЦрди /usr/local рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

2. рдПрдХ рдкрд░реАрдХреНрд╖рдг SVN рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдПрдВ

 рдирд┐рд░реНрдпрд╛рдд SVN_REPO = / tmp / svn_repo
 svnadmin $ SVN_REPO рдмрдирд╛рддреЗ рд╣реИрдВ

3. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, perlcritic-checker рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 рдмрд┐рд▓реНрд▓реА> $ SVN_REPO / рд╣реБрдХ / perlcritic-checker.conf << 'EOF'
 #
 # perlcritic- рдЪреЗрдХрд░ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг
 #
 {
     # рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб: {0 | 1} |  рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб рдореЗрдВ perlcritic-checker
     # рдореМрдЬреВрджрд╛ рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд░реЛрдХрддрд╛ рд╣реИ
     # рдирдП рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ред  рдкрд░реНрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ :: рд╕рдорд╛рд▓реЛрдЪрдХ
     # рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзреАрд░реЗ-рдзреАрд░реЗред
     рдкреНрд░рдЧрддрд┐рд╢реАрд▓_рдореЛрдб => 1,

     # рдЖрдкрд╛рддрдХрд╛рд▓ рд▓рдЧрд╛рддрд╛ рд╣реИ: {0 | 1} |  рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ * рдЬрд╝рд░реВрд░рдд * рд╣реЛрддреА рд╣реИ
     # рд╕рднреА рдЪреЗрдХ (рдЬреИрд╕реЗ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдмрдЧ рдлрд┐рдХреНрд╕) рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
     # рдпрд╣ рдХрд░рддрдм рдЖрдкрдХреЛ Perl :: Critic рдХреЛ "рдЬрд╛рджреВ" рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
     # рдЯрд┐рдкреНрдкрдгреА рд╕рдВрджреЗрд╢, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: svn ci -m "NO CRITIC: I am in рдЬрд▓реНрджреА" FooBar.pm
     allow_emergency_commits => 1,

     # рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдореИрдЬрд┐рдХ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
     рдЖрдкрд╛рддрдХрд╛рд▓реАрди_рдХрд░рдг_рд╕рдорд░реНрдердХ => 'рдХреЛрдИ рдХреНрд░реЗрдбрд┐рдЯ',

     # рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдХрд░реЗрдВред  рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
     # рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдЦреНрдд рдФрд░ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рддрд░реАрдХреЗ рд╕реЗред  рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ
     # рдЙрд▓реНрд▓рдВрдШрди рдХреА рд▓рдВрдмреА рд╕реВрдЪреА рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛: рдХреЗрд╡рд▓ рдПрди рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдЙрд▓реНрд▓рдВрдШрди
     # рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред  рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ,
     # рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рд▓рдВрдмрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
     #
     # рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЗрдиреЗрд░рд┐рдХ рдореЗрдВ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ
     # svn- рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм svn рд╣реБрдХ (рдпрд╛рдиреА perlcritic-checker.pl)
     # рдЖрдЙрдЯрдкреБрдЯ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛: svn-client рд╕рд┐рд░реНрдл рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ "рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЧрдпрд╛
     # рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ "ред рдЗрд╕ рдмрдЧ рдХреЛ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред"
     # рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
     # - рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдПрдХреНрд╕реЗрд╕ рд╕реНрдХреАрдо: 'svn: //' (svnerve daemon)
     # - рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рдкрд░ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░
     # - linux рдкрд░ svn-client рдФрд░ -server рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ
     #
     # рдпрджрд┐ рдЖрдк рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
     # max_violations => 50,

     # рдПрд╕рд╡реАрдПрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрде - рдЯреВ - рдкрд░реНрд▓ :: рдХреНрд░рд┐рдЯрд┐рдХ рдХреА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореИрдкрд┐рдВрдЧред
     #
     # рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдЕрд▓рдЧ рдкрд░реНрд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ :: рдЖрд▓реЛрдЪрдХ
     # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдиреАрддрд┐рдпрд╛рдВред  рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
     # рдЖрдк рдмреНрд░рд╛рдВрдб-рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
     # рдХреБрдЫ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рднреЛрдЧ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо
     # рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдпрд╛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдХреЛрдб рдХреА рдЬрд╛рдБрдЪред
     #
     # рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╢реЛрдзрд┐рдд (рдЬреЛрдбрд╝рд╛, рдЕрджреНрдпрддрди, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐, рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд) рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ
     # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдорд┐рд▓рд╛рди рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
     # рдзреНрдпрд╛рди рд░рдЦреЗрдВ, * рдЕрдВрддрд┐рдо * рдорд┐рд▓рд╛рди рдирд┐рдпрдо - рдЬреАрддред
     #
     # рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрде рдкреВрд░реНрдг рдпрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред  рдмрд╛рдж рдореЗрдВ
     # рдорд╛рдорд▓рд╛ рд╡реЗ $ REPOS / рд╣реБрдХ / perlcritic.d рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рддрд╣рдд рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
     рдкреНрд░реЛрдлрд╛рдЗрд▓ => [

         # рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рдЦреНрдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
         {рдкреИрдЯрд░реНрди => qr {[ред] (рджреЛрдкрд╣рд░ | pl | t) $},
             рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ => 'рд▓рдВрдмрд┐рдд- brutal.conf')
         }
     ]
 }
 EOF

рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ Perl::Critic 'рд╕рднреА *.pm , *.pl рдФрд░ *.t рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ perlcritic-brutal.conf рд╕реЗ рд▓реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдо рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб (рдиреАрдЪреЗ рдкрдврд╝реЗрдВ) рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдХрдорд┐рдЯреНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдХреМрди рд╕реЗ рдХрдорд┐рдЯ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ ( NO CRITIC )ред

рдЕрдЧрд▓рд╛ рдЪрд░рдг Perl::Critic profile ( perlcritic-brutal.conf ) рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

 mkdir $ SVN_REPO / рд╣реБрдХ / perlcritic.d
 cat> $ SVN_REPO / рд╣реБрдХ / perlcritic.d / perlcritic-brutal.conf << 'EOF'
 #
 # рдкрд░реНрд▓ :: рдЖрд▓реЛрдЪрдирд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЙрджрд╛рд╣рд░рдг
 #

 # рдкрд░рд┐рдзрд┐ рдХреЛ рдмрд╣реБрдд рд╕рдЯреАрдХ рдмрдирд╛рдПрдВ
 рдЧрдВрднреАрд░рддрд╛ = рдХреНрд░реВрд░

 # рдЖрдк 1 рд╕реЗ 11 рддрдХ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 8 рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ
 рдХреНрд░рд┐рдпрд╛ = 8

 # рдЙрдирдХреА рдЧрдВрднреАрд░рддрд╛ рдХреЗ рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рд░рдВрдЧ рджреЗрдВ
 рд░рдВрдЧ = рез

 # рдпрджрд┐ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рддреЛ рд░реБрдХреЗрдВ
 рдкреНрд░реЛрдлрд╛рдЗрд▓-рд╕рдЦреНрддреА = рдШрд╛рддрдХ

 # рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдХреЗрд╡рд▓ рджреЛ рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ: рдХреЛрд░ рдФрд░ рдкрд░реНрд▓ рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕
 рд╡рд┐рд╖рдп = рдХреЛрд░ ||  PBP

 # рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ :: рд╕рд╛рдл рд╕реБрдерд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕
 [CodeLayout :: рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд╕рд╛рд░]
 perltidyrc = / etc / perltidyrc
 EOF

рдЗрд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд▓реЛрдЪрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдмрд╕реЗ рдХрдареЛрд░ рдореЛрдб ( severity = brutal ) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЫреЛрдЯреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдЧрд▓рддреА рдкрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдорд╛рдирди рдореЗрдВ рдХреЛрдИ рдЫреЛрдЯреА рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ)ред theme рдирд┐рд░реНрджреЗрд╢ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд▓рдмреНрдз рдкреЙрд▓рд┐рд╕реА рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдореЗрдВ рд╕реЗ, рдФрд░ рд▓рдЧрднрдЧ рдбреЗрдврд╝ рд╕реМ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рдХреЛрд░ рдпрд╛ рдкрд░реНрд▓ рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕реЗрд╕ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ perltidy рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрд▓ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рдПрдХ рдкреНрд░рд╛рд░реВрдкрдг рдЙрд▓реНрд▓рдВрдШрди рдЙрди рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг рдХреЛрдИ рдкреНрд░рддрд┐рдмрджреНрдз рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдореВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИред рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ Perl::Critic рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: perldoc Perl::Critic ред

рдЕрдЧрд▓рд╛, рд╣рдо perltidy рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди perltidy (рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде):

 рд╕реВрджреЛ рд╕реБ -
 рдмрд┐рд▓реНрд▓реА> / etc / perltidyrc << 'EOF'
 --perl-best-practices
 EOF
 рдирд┐рдХрд╛рд╕

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ: рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкрд░реНрд▓ рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдмреБрдХ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб perltidy рдирд┐рд░реНрджреЗрд╢ perltidy ред рдпрджрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ perltidy (1p) рдореИрдиреБрдЕрд▓ рдкреЗрдЬ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд╡рд░реВрдкрдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдФрд░ рдкрде рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд╣рд▓реЗ perltidy рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ $HOME/.perltidyrc рдФрд░ рдлрд┐рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдПрдХ - /etc/perltidyrc ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ /etc рдореЗрдВ рд░рдЦрдХрд░ /etc рд╣рдо рдЗрд╕реЗ perlcritic-checker (рдЖрдорддреМрд░ рдкрд░ svn рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рдФрд░ perltidy рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз perltidy , рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ perltidy рд╣реИред

рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдмрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП perlcritic-checker.pl рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА perlcritic-checker.pl рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ pre-commit рд╣реБрдХ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 рдмрд┐рд▓реНрд▓реА> $ SVN_REPO / рд╣реБрдХ / рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз << 'EOF'
 #! / рдмрд┐рди / рд╢

 #
 # SVN рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг
 #

 REPOS = "$ 1"
 TXN = "$ 2"
 PREFIX = "/ usr / рд╕реНрдерд╛рдиреАрдп"

 # рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░реНрд▓ рдХреЛрдб рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ
 $ PREFIX / bin / perlcritic-checker.pl \
     - рднрдВрдбрд╛рд░ "$ REPOS"
     --config "$ REPOS / рд╣реБрдХ / perlcritic-checker.conf" \
     - рд░реВрдкрд╛рдВрддрд░рдг "$ TXN" ||  рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ 1

 # рд╕рднреА рдЪреЗрдХ рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдорд┐рдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
 рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ 0
 EOF
 chmod 755 $ SVN_REPO / рд╣реБрдХ / рдкреВрд░реНрд╡-рд╡рдЪрди

рдпрд╣ рд╕реЗрдЯрдЕрдк рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЕрдЪреНрдЫрд╛, рдмреБрд░рд╛, рдкреНрд░рдЧрддрд┐рд╢реАрд▓


рдЗрд╕рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЯреЗрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рд╡рд░реНрдХрд┐рдВрдЧ рдХреЙрдкреА рдХрд╛ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ:

 WORK_COPY = "/ tmp / test_project" рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ
 svn mkdir рдлрд╝рд╛рдЗрд▓: // $ SVN_REPO / test_project -m ""
 svn рдЪреЗрдХрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓: // $ SVN_REPO / test_project $ WORK_COPY

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ "рдЕрдЪреНрдЫреА" рдлрд╝рд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдП (рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓):

 рдмрд┐рд▓реНрд▓реА> $ WORK_COPY / good_file.pl << 'EOF'
 #! / usr / рдмрд┐рди / рдкрд░реНрд▓

 # ==================================================== ==============================
 # рд╕рдореАрдХреНрд╖рд╛: $ Id $
 # рд╡рд┐рд╡рд░рдг: рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓
 # ==================================================== ==============================

 рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
 рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

 рд╣рдорд╛рд░реЗ $ рд╕рдВрд╕реНрдХрд░рдг = '1.0';

 рдЙрдк рдореБрдЦреНрдп {
     рд╡рд╛рдкрд╕реА;
 }

 рдореБрдЦреНрдп ();
 EOF
 chmod 755 $ WORK_COPY / good_file.pl

рдФрд░ "рдЦрд░рд╛рдм" рдлрд╝рд╛рдЗрд▓ (рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓):

 рдмрд┐рд▓реНрд▓реА> $ WORK_COPY / bad_file.pl << 'EOF'
 #! / usr / рдмрд┐рди / рдкрд░реНрд▓

 # ==================================================== ==============================
 # рд╕рдореАрдХреНрд╖рд╛: $ Id $
 # рд╡рд┐рд╡рд░рдг: рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓
 # ==================================================== ==============================

 рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

 # рдлреНрдпреВрдЬ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ;

 рд╣рдорд╛рд░реЗ $ рд╕рдВрд╕реНрдХрд░рдг = "1"ред  "ред"  ред  "0";

 рдЙрдк рдореБрдЦреНрдп () {
     рд╡рд╛рдкрд╕ рдЖрдирд╛;
 }

 рдореБрдЦреНрдп ();
 EOF
 chmod 755 $ WORK_COPY / bad_file.pl

рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрдЪреНрдЫреА рдлрд╝рд╛рдЗрд▓ рдХрдорд┐рдЯ рдкрд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 cd $ WORK_COPY
 svn рдЬреЛрдбрд╝реЗрдВ good_file.pl
 svn рдкреНрд░рддрд┐рдмрджреНрдз -m "рдпрд╣ рдкреНрд░рддрд┐рдмрджреНрдз рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" good_file.pl

рд▓реЗрдХрд┐рди рдЦрд░рд╛рдм рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдкрд░ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдП:

 cd $ WORK_COPY
 svn рдЬреЛрдбрд╝реЗрдВ bad_file.pl
 svn рдХрдорд┐рдЯ-рдПрдо "рдпрд╣ рдХрдорд┐рдЯ рдлреЗрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" bad_file.pl


 Bad_file.pl рдЬреЛрдбрд╝рдирд╛
 рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ .svn: рдкреНрд░рддрд┐рдмрджреНрдз рд╡рд┐рдлрд▓ (рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ):
 svn: рдЙрддреНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ (рдирд┐рдХрд╛рд╕ рдХреЛрдб 1) рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддрд┐рдмрджреНрдз:
 test_project / bad_file.pl: [рд╕рдмрд░реВрдЯреАрдВрд╕ :: рдкреНрд░реЛрд╣рд┐рдмрд┐рдЯрдПрдХреНрд╕рдкреНрд▓рд┐рд╕рд┐рдЯ рд░реАрдЯрд░реНрдирдЙрдВрдбрдл] рд▓рд╛рдЗрди 15, рдХреЙрд▓рдо 5 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ "рдЕрдирдбреЗрдл" рдХреЗ рд╕рд╛рде "рд░рд┐рдЯрд░реНрди" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [Subroutines :: ProhibitSubroutinePrototypes] рдкрдВрдХреНрддрд┐ 14, рдХреЙрд▓рдо 1 рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рдмрд░реВрдЯреАрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [рдЯреЗрд╕реНрдЯрд┐рдВрдЧрдЕрдВрдбрдмреЗрдбрд┐рдВрдЧ :: рдЖрд╡рд╢реНрдпрдХрддрд╛рд╡рд╛рд░реНрддрд╛] рдХреЛрдб рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб 12, рдХреЙрд▓рдо 1 рдкрд░ рд╕рдХреНрд╖рдо рд╣реИрдВред (рдЧрдВрднреАрд░рддрд╛: 4)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitNoisyQuotes] рдкрдВрдХреНрддрд┐ 12, рдХреЙрд▓рдо 22 рдкрд░ рдПрдХ рд╢реЛрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдЧрдВрднреАрд░рддрд╛: 2)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рдкрдВрдХреНрддрд┐ 12, рдХреЙрд▓рдо 16 рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рдкрдВрдХреНрддрд┐ 12, рдХреЙрд▓рдо 22 рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рд▓рд╛рдЗрди 12, рдХреЙрд▓рдо 28 рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 ---
 рдЖрдк рдЯрд┐рдкреНрдкрдгреА рд╕рдВрджреЗрд╢ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ 'рдХреЛрдИ CRITIC' рд░рдЦрдХрд░ рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
 рдЬреИрд╕реЗ: svn ci -m "NO CRITIC: рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╣реЙрдЯрдлрд╝рд┐рдХреНрд╕" FooBar.pm

рдЫрд╡рд┐

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд▓реНрд▓рдВрдШрди рдЧрдВрднреАрд░рддрд╛ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реИрдВ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдореЗрдВ рднреА рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрджрд┐ рдЙрд▓реНрд▓рдВрдШрди рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдЦрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣реИрдВ, рддреЛ рдЗрд╕ рд░реЗрдЦрд╛ рдкрд░ рд▓рд╛рдЗрди рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕реНрдерд┐рддрд┐ рд╕рдВрдЦреНрдпрд╛ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдкреЙрд▓рд┐рд╕реА рдХрд╛ рд╕рд╛рд░ рдФрд░ рд╢реАрд░реНрд╖рдХ рдЗрд╕рдХреЗ рд╕рд╛рд░ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: perlcritic --doc TestingAndDebugging::RequireUseWarnings | less perlcritic --doc TestingAndDebugging::RequireUseWarnings | less

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ Perl::Critic рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ Perl::Critic рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдиреАрддрд┐ рдХреА рд╕реВрдЪреА, рдЖрдЙрдЯрдкреБрдЯ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ perlcritic-brutal.conf рдореЗрдВ theme рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдХреНрд░рд┐рдп рдиреАрддрд┐ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ)ред

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рдЦрд░рд╛рдм рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ред рддреЛрдбрд╝рдлреЛрдбрд╝ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ (рджрд╛рдПрдВ) рдЙрд▓реНрд▓рдВрдШрди рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ (рдордЬрдмреВрд░) рд╣реИ рдХрд┐ рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЛ рдЗрдорд░рдЬреЗрдВрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕рднреА рдЬрд╛рдВрдЪ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 cd $ WORK_COPY
 svn рдкреНрд░рддрд┐рдмрджреНрдз -m "NO CRITIC: рдореИрдВ рдЬрд▓реНрджреА рдореЗрдВ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ" bad_file.pl

рдЗрд╕ рд░реВрдк рдореЗрдВ, рдХрдорд┐рдЯ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рд╕реЗрдВрд╕рд░рд╢рд┐рдк рд╡рд┐рднрд╛рдЧ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬрд╛рдПрдЧрд╛ред

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

 ## рдХреЛрдИ рдЖрд▓реЛрдЪрдХ рдирд╣реАрдВ рд╣реИ (рд╕рдмрд░реВрдЯреАрдиреНрд╕ :: рдирд┐рд╖реЗрдз

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

 ## рдЖрд▓реЛрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рджреЛ '#' рдкрд╛рддреНрд░реЛрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдиреАрддрд┐ рдХреЛ рдирд╛рдо рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

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

рддреЛ рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк - perlcritic-checker рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛, рдмрдбрд╝реА рдореМрдЬреВрджрд╛ рдкрд░реНрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХреЗ рдЧреИрд░-рд░рд╛рдЬрдиреАрддрд┐рдХ рдХреЛрдб (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЧреИрд░-рд╕рдЦреНрдд severity рд╕реНрддрд░ рдкрд░) рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рд┐рд░реНрдл рдСрдл рд╕реНрдХреЗрд▓ рд╣реИред рдХреЛрдб рдХреЗ рд╢реЗрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рдо рдХреЛрдб, рдХреЗрд╡рд▓ Perl::Critic рдЖрд▓реЛрдЪрдирд╛ рдЕрдХреНрд╖рдо рд╣реИ, рдФрд░ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдЖрд╡рд╛рдЧрдорди ( NO CRITIC ) рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

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

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдпреЛрдЬрдирд╛ рдирдИ рдЬреЛрдбрд╝реА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдЦреНрдд рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ: рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЧреИрд░-рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдИ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдерд╛ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ "рдЦрд░рд╛рдм" рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рд╢рд╛рдорд┐рд▓ рдереЗ, рд╣рдордиреЗ рдЗрд╕реЗ NO CRITIC рд╕рд╛рде рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ред рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирдП рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ (рдФрд░ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ use warnings рд▓рд┐рдП use warnings рдмрджрд▓реЗ use strict рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ perlcritic-checker рджреЗрдЧрд╛?):

 рдмрд┐рд▓реНрд▓реА> $ WORK_COPY / bad_file.pl << 'EOF'
 #! / usr / рдмрд┐рди / рдкрд░реНрд▓

 # ==================================================== ==============================
 # рд╕рдореАрдХреНрд╖рд╛: $ Id $
 # рд╡рд┐рд╡рд░рдг: рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ (рд╕рдВрд╕реНрдХрд░рдг 2)
 # ==================================================== ==============================

 # рд╕рдЦреНрдд;
 рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

 рд╣рдорд╛рд░реЗ $ рд╕рдВрд╕реНрдХрд░рдг = "1"ред  "ред"  ред  "0";

 рдЙрдк рдлреВ () {
     1 + 1;
 }

 рдЙрдк рдореБрдЦреНрдп () {
     рд╡рд╛рдкрд╕ рдЖрдирд╛;
 }

 рдореБрдЦреНрдп ();
 EOF
 cd $ WORK_COPY
 svn рдкреНрд░рддрд┐рдмрджреНрдз -m "рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрд▓реНрд▓рдВрдШрди рдЬреЛрдбрд╝реЗрдВ" bad_file.pl


 рдмреИрдб_рдлрд╛рдЗрд▓.рдкреНрд▓реЗ рднреЗрдЬрдирд╛
 рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ .svn: рдкреНрд░рддрд┐рдмрджреНрдз рд╡рд┐рдлрд▓ (рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ):
 svn: рдЙрддреНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ (рдирд┐рдХрд╛рд╕ рдХреЛрдб 1) рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддрд┐рдмрджреНрдз:
 test_project / bad_file.pl: [рд╕рдмрд░реВрдЯреАрдиреНрд╕ :: рдкреНрд░реЛрд╣рд┐рдмрд┐рдЯрдПрдХреНрд╕рдкреНрд▓рд┐рд╕рд┐рдЯ рд░реАрдЯрд░реНрдирдЙрдВрдбрдл] рд▓рд╛рдЗрди 18, рдХреЙрд▓рдо 5 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ "рдЕрдирдбреЗрдл" рдХреЗ рд╕рд╛рде "рд░рд┐рдЯрд░реНрди" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [Subroutines :: ProhibitSubroutinePrototypes] Subroutine рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдВрдХреНрддрд┐ 13, рдХреЙрд▓рдо 1 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [Subroutines :: ProhibitSubroutinePrototypes] рдкрдВрдХреНрддрд┐ 17, рдХреЙрд▓рдо 1 рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рдмрд░реВрдЯреАрди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [TestAndDebugging :: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ] рдХреЛрдб рд╕рдЦреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб 11 рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдХреЙрд▓рдо 1 (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [рд╕рдмрд░реВрдЯреАрдиреНрд╕ :: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБрдлрд░реНрдЯрд▓рд╛рдЗрди] рд╕рдмрд░реВрдЯреАрди рдкрдВрдХреНрддрд┐ 13, рдХреЙрд▓рдо 1 рдореЗрдВ "рд╡рд╛рдкрд╕реА" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЧрдВрднреАрд░рддрд╛: 4)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitNoisyQuotes] рдкрдВрдХреНрддрд┐ 11, рд╕реНрддрдВрдн 22 рдкрд░ рдПрдХ рд╢реЛрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдЧрдВрднреАрд░рддрд╛: 2)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рдкрдВрдХреНрддрд┐ 11, рдХреЙрд▓рдо 16 рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рд▓рд╛рдЗрди 11, рдХреЙрд▓рдо 22 рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдмреЗрдХрд╛рд░ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 test_project / bad_file.pl: [ValuesAndExpressions :: ProhibitInterpolationOfLiterals] рд▓рд╛рдЗрди 11, рдХреЙрд▓рдо 28 рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдмреЗрдХрд╛рд░ рдкреНрд░рдХреНрд╖реЗрдкред (рдЧрдВрднреАрд░рддрд╛: 1)
 test_project / bad_file.pl: [Subroutines :: ProhibitSubroutinePrototypes] рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо 1 рдЙрд▓реНрд▓рдВрдШрди (рдУрдВ) рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдерд╛: 1, рдЕрдм: 2) (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [TestAndDebugging :: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдЙрдкрдпреЛрдЧ] рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо 1 рдЙрд▓реНрд▓рдВрдШрди (рдУрдВ) рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдерд╛: 0, рдЕрдм: 1) (рдЧрдВрднреАрд░рддрд╛: 5)
 test_project / bad_file.pl: [рд╕рдмрд░реВрдЯреАрдиреНрд╕ :: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБрдлрд░реНрдЯрд▓рд╛рдЗрди] рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо 1 рдЙрд▓реНрд▓рдВрдШрди (рдУрдВ) рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдерд╛: 0, рдЕрдм: 1) (рдЧрдВрднреАрд░рддрд╛: 4)
 ---
 рдЖрдк рдЯрд┐рдкреНрдкрдгреА рд╕рдВрджреЗрд╢ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ 'рдХреЛрдИ CRITIC' рд░рдЦрдХрд░ рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
 рдЬреИрд╕реЗ: svn ci -m "NO CRITIC: рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╣реЙрдЯрдлрд╝рд┐рдХреНрд╕" FooBar.pm

рдЫрд╡рд┐

рдЬреИрд╕реА рдХрд┐ рдЙрдореНрдореАрдж рдереА, рдкреНрд░рддрд┐рдмрджреНрдз рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ред рд╡рд┐рд╖рдо рдкреГрд╖реНрдарднреВрдорд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдирдП рдЕрдиреБрднрд╛рдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕ рдЦрдВрдб рдореЗрдВ, perlcritic-checker рдиреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ perlcritic-checker рдЙрд▓реНрд▓рдВрдШрди рджрд┐рдЦрд╛рдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ [Subroutines::ProhibitSubroutinePrototypes] рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреВрд╕рд░рд╛ рдЙрд▓реНрд▓рдВрдШрди рдЬреЛрдбрд╝рд╛ рдФрд░ рджреЛ рдирдП рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬреЛ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдереЗ: [TestingAndDebugging::RequireUseStrict] рдФрд░ [Subroutines::RequireFinalReturn] ред рдЬреИрд╕рд╛ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд▓реНрд▓рдВрдШрди [TestingAndDebugging::RequireUseWarnings] рд╣рдордиреЗ рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рднреЛрдЧ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рдкрд╛рдардХ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ: рд╣рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рднреА рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдереЗ? рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдЙрд▓реНрд▓рдВрдШрди рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдкрд╣рд▓реЗ рдФрд░ рдЕрдм рдирд╛рдо рдиреАрддрд┐ рдФрд░ рдШрдЯрдирд╛ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, perlcritic-checker рд▓рд╛рдЗрди 13 рдФрд░ рд▓рд╛рдЗрди 17 рдкрд░ [Subroutines::ProhibitSubroutinePrototypes] рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдордж рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ "рдкреНрд░рдЧрддрд┐рд╢реАрд▓" рднрд╛рдЧ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдКрдкрд░реА рднрд╛рдЧ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ, рдиреАрддрд┐ рдирд╛рдо рд╕реЗ, рдЖрдк рдЙрд╕ рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдиреАрддрд┐ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдБрдЧрд╛ рдХрд┐ NO CRITIC рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рдореЛрдб рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЖрдЧреЗ рдХреА рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрд╕


  1. рдЖрд▓реЛрдЪрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ: VIM , Emacs ред
  2. рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдПрдХреАрдХрд░рдг рдХреЛ perltidy рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: VIM , Emacs ред
  3. рдПрдХ рдмрдЪрдд рдмреИрдВрдХ рдореЗрдВ рдЕрдкрдиреЗ рдкреИрд╕реЗ рд░рдЦреЗрдВ Perl::Critic рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рддрд╣рдд Perl::Critic рдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╣рд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд╕рднреА рд╕рджрд╕реНрдп рдПрдХ рд╣реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдФрд░ perlcritic-checker рдЕрдкрдиреЗ рдЖрдк рд╣реА рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдЧрд╛ред
  4. рд╕рдмрд╕реЗ рд╕рдЦреНрдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ( severity = brutal , рд╕рднреА рдиреАрддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЕрдкрд╡рд╛рдж рдФрд░ рд╕рдорд╛рдпреЛрдЬрди рдЬреЛрдбрд╝реЗрдВред
  5. рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ *.pm , *.pl рдФрд░ *.t рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЖрд▓реЛрдЪрдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд╣реА рд╣реЛрдВред
  6. рдкрд░реНрд▓ рдмреЗрд╕реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕реЗрдЬ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рдирд┐рдХрд╛рд▓реЗрдВред


рдирд┐рд╖реНрдХрд░реНрд╖


Perl::Critic рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╕рдордп Perl::Critic рдЕрдкрдиреА рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ Perl::Critic рдХрд░рдирд╛, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рди рдХрд┐ рд╣рдардзрд░реНрдорд┐рддрд╛, рдЬрд┐рд╕рдХреЗ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХрд╛ рдЖрдБрдЦ рдмрдВрдж рдХрд░рдХреЗ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрдиреБрдореЛрджрди рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреА рдЯреАрдо рдЕрдВрддрддрдГ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЖ рдЬрд╛рдПрдЧреА рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЖрдкрдХреА рдЖрджрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред

рд╕рдВрджрд░реНрдн


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


All Articles