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