Your SlideShare is downloading. ×
Clt 2011 Perl Critic
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Clt 2011 Perl Critic

1,471
views

Published on

Vortrag über Perl::Critic vom Chemnitzer LinuxTag 2011

Vortrag über Perl::Critic vom Chemnitzer LinuxTag 2011


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,471
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Der Vortragende Perl-Programmierung Perl::Critic Perl::CriticDein Nachfolger könnte ein Psychopath sein Renée Bäcker Chemnitzer LinuxTage 2011 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 2. Der Vortragende Perl-Programmierung Perl::CriticÜber mich... Renée Bäcker Perl-Programmierer seit 2002 Perl-Services.de Schulungen Programmierung OTRS Perl-Magazin Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 3. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesIst das wirklich Perl? ($/,$%,$.,$-)=(gmtime($^T+=86400))[3..6]while($/-12)/4|$ 2||++$printf 1900+$..-%02d-%02dn,++$%,$/==8?8:$/-7 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 4. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesPerl == RSA? The only language that looks the same before and after RSA encryption. Keith Bostic Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 5. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesSolcher Code macht Dich glücklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 6. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices... aber nur für einen kurzen Augenblick Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 7. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices... nach ein paar Monaten Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 8. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesIm Team ist so etwas unangebracht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 9. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesIm Team ist so etwas unangebracht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 10. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesEin Team braucht Regeln Tim, 26, C Perl for ( $i = 0; $i = $#zahlen; $i++ ) { $array[i] = $zahlen[$i] * 2; } Michael, 27, schon länger bei Perl dabei for my $i ( 0 .. $#zahlen ) { $array[$i] = $zahlen[$i] * 2; } Sabrina, 25, Perl mit der Muttermilch aufgenommen ;-) my @array = map{ $_ * 2 }@zahlen; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 11. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesEin Team braucht Regeln Die Regeln sollten für einige Punkte abdecken: Code-Layout erlaubte Konstrukte Perl-Version Metadaten Projektinformationen (VCS,...) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 12. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesRegeln für Perl-Code Firmen haben Regeln für Java C/C++ ... Aber nur wenige haben festgelegte Regeln für Perl. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 13. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesRegeln für Perl-Code Ohne Regeln... ... gibt es einen Wildwuchs an Perl-Code. Wartbarkeit nimmt ab. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 14. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesDas Buch Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 15. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesWas Damian Conway beschreibt... Best Practices ein paar wenige Kapitel sind veraltet (z.B. Objekte ) Vorschläge seine Erfahrung absolut lesenswertes Material Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 16. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesGesetz?? - Viele halten es dafür... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 17. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices... ist es aber nicht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 18. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best PracticesKategorien Conway zeigt Best Practices für eine ganze Reihe von Kategorien: Code-Layout Namenskonventionen Werte und Ausdrücke Variablen Kontrollstrukturen ... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 19. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas hat Perl Best Practices mit Perl::Critic zu tun? Auf der Basis des Buchs wurde Perl::Critic entwickelt. Damit lässt sich der eigene Code analysieren... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 20. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas ist Perl::Critic? Hilft dem Programmierer Fehler zu vermeiden, mehr oder weniger wie use warnings und use strict mehr... Perl::Critic schaut nicht auf die einfache syntaktische Korrektheit, sondern achtet darauf, dass gewisse Regeln eingehalten werden - z.B. ob Subroutinennamen CamelCase sind oder nicht. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 21. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas ist Perl::Critic? Hilft dem Programmierer Fehler zu vermeiden, mehr oder weniger wie use warnings und use strict weniger... Perl::Critic kompiliert den Code nicht, sondern parst ihn dank PPI als Dokument. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 22. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnEin erstes Beispiel Ein erstes Beispiel #!/usr/bin/perl print Hallo Chemnitz; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 23. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnAusgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 24. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnAusgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 25. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnAusgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 26. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnAusgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 27. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 28. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 29. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 30. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnNochmal... Regeln kosmetischer Natur?!? Gleiches Programm, aber... ~ perlcritic -severity=1 1.pl Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 31. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnAusgabe ... viel mehr Fehler Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: 1) RCS keywords $Id$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column 1. See p age 441 of PBP. (Severity: 2) RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) No package-scoped $VERSION variable found at line 1, column 1. See page 404 o f PBP. (Severity: 2) Return value of agged function ignored - print at line 3, column 1. See pages 208,278 of PBP. (Severity: 1) Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 32. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas ist passiert? Warum gibt es jetzt viel mehr Warnungen? Wir wollten, dass Perl::Critic viel pingeliger ist! -severity=1 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 33. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnSeverities Severities gewichtet die Regeln 5 (gentle) Schwerwiegenste Regeln 4 (stern) 3 (harsh) 2 (cruel) 1 (brutal) Kosmetische Regeln Wer Regeln entwirft muss diese Wichtigkeit festlegen - kann aber noch angepasst werden. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 34. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnEin weiteres Beispiel Hier ist alles ok, oder? #!/usr/bin/perl # $Id$ use strict; use warnings; our $VERSION = 0.01; my $has_flag = check_flag(); print No flag if !$has_flag; sub check_flag { return 1; } Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 35. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDer Fehler Nein, doch noch eine Meldung... ~perlcritic -severity=2 2.pl Postx control if used at line 13, column 17. See pages 93,94 of PBP. (Severity: 2) Ich bin aber ein Freund des nachgestellten if. Was nun? Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 36. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDer Fehler Nein, doch noch eine Meldung... ~perlcritic -severity=2 2.pl Postx control if used at line 13, column 17. See pages 93,94 of PBP. (Severity: 2) Ich bin aber ein Freund des nachgestellten if. Was nun? Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 37. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnRegeln ausschlieÿen Man kann Regeln auch ausschlieÿen. Perl Best Practices liefert Anregungen, wie man programmieren kann, man muss aber nicht mit allem einverstanden sein. Es gibt mehrere Wege, um Regeln auszuschlieÿen: 1. Weg ~perlcritic -severity=2 -exclude=ProhibitPostxControls 2.pl 2.pl source OK Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 38. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnRegeln ausschlieÿen Man kann auch im Code über bestimmte Kommentare die Regeln ausschalten 2. Weg use strict; ## no critic (RequireCamelCase) my $has_flag = check_flag(); ## use critic sub connect {} ## no critic (ProhibitBuiltinHomonyms) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 39. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnKonguration Eine weitere Möglichkeit ist, eine Kongurationsdatei zu erstellen .perlcriticrc INI-Format Suchreihenfolge: im aktuellen Verzeichnis im HOME-Verzeichnis Angabe in Umgebungsvariablen PERLCRITIC Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 40. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnKonguration Ausschnitt einer Kongurationsdatei [ControlStructures::ProhibitPostfixControls] allow = if unless # My custom configuration severity = cruel # Same as severity = 2 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 41. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnKonguration Ausschnitt einer Kongurationsdatei [-NamingConventions::Capitalization] [-ValuesAndExpressions::ProhibitMagicNumbers] Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 42. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnKonguration Ausschnitt einer Kongurationsdatei [Modules::RequireFilenameMatchesPackage] add_themes = larry [TestingAndDebugging::RequireTestLables] add_themes = larry curly moe Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 43. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnThemes Unterschiedliche Projekte Unterschiedliche Kongurationen Themes sind die Lösung Themes sind Gruppierungen von Regeln. Für jedes Projekt wird ein Theme erstellt und entsprechend eingebunden Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 44. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnThemes im Einsatz Themes im Einsatz ~perlcritic -theme=core 3.pl Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: 1) RCS keywords $Id$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) [...] Subroutine OTRSName is not all lower case or all upper case at line 6, column 1. See pages 45,46 of PBP. (Severity: 1) ~perlcritic -theme=maintenance 3.pl 3.pl source OK ~perlcritic -theme=otrs 3.pl Variable, subroutine, and package names have to be in CamelCase at line 7, colum n 1. (no explanation). (Severity: 5) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 45. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnRoundup Perl::Critic in der Zusammenfassung Statische Codeanalyse Basiert auf Regeln PPI Viele Einstellmöglichkeiten Severeties Themes Einzelne Regeln hinzufügen/abschalten Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 46. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic testen Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 47. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnIn Projektarbeit einbinden... Gröÿter Nutzen wenn es direkt in die Projekte eingebunden wird Direkt in Unittests Test::Perl::Critic Als Hooks in Versionskontrollsysteme Regelmäÿig selbst laufen lassen - schon während der Entwicklung Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 48. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in Unittests Einfach ein Testskript erstellen: 98_perl_critic.t use Test::Perl::Critic; my $rcfile = File::Spec-catfile( t, perlcriticrc ); Test::Perl::Critic-import( -profile = $rcfile ); all_critic_ok(); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 49. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in Unittests Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 50. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 51. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 52. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 53. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 54. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in VCS SVN-Hook SET REPOS=%1 SET TXN=%2 perl D:Repositoryhooksperl_critic.pl %REPOS% %TXN% Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 55. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in VCS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 56. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... in VCS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 57. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWeitere Pakete auf CPAN Häug reichen die Standardregeln nicht aus. CPAN liefert noch weitere Pakete mit Regeln: Perl::Critic::Bangs Perl::Critic::Lax Perl::Critic::OTRS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 58. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... Perl::Critic::Bangs Für Modulentwickler sehr interessant ProhibitCommentedOutCode Wer hat sich noch nicht über gröÿere Mengen alten Codes geärgert? ProhibitFlagComments Überprüft auf Flags wie TODO, JFDI,... ProhibitNoPlan Tests sollten einen Plan haben... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 59. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... Perl::Critic::Bangs ProhibitNumberedNames my $var2 ist nicht sehr aussagekräftig ProhibitVagueNames my $data ist nichtssagend Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 60. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... Perl::Critic::Lax An manchen Stellen ist Perl::Critic zu strikt. Hier helfen dann diese Regeln: ProhibitEmptyQuotes::ExceptAsFallback Erlaubt so etwas wie my $var = $test || ProhibitStringyEval::ExceptForRequire String-eval ist nicht gut, aber manchmal braucht man es doch RequireEndWithTrueConst Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 61. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln... Perl::Critic::OTRS Wer OTRS-Entwicklung betreibt, kann sich diese Regeln anschauen: RequireCamelCase AllesMussInCamelCaseGeschriebenWerden (Subs, Variablen,...) RequireParensWithMethods Alle Nicht-Builtin-Methodenaufrufe müssen Klammern haben ... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 62. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnEigene Regeln Aber manchmal reichen auch diese Erweiterungen auf dem CPAN nicht! Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 63. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWie arbeitet Perl::Critic? Wie am Anfang erwähnt, arbeitet Perl::Critic mit PPI! Wer eigene Regeln entwickeln will, muss sich also mal mit PPI beschäftigen... Parser für Perl-Dokumente Parsen nach menschlichen Verständnis Reines Perl Relativ langsam Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 64. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas ist eigentlich Perl? Acme::Buy use Acme::Buffy; BUffY bUFFY BUffY bUFFY bUfFy buFfY bUFfY bUFFY buffy buffY bUffy buFFY buffY BuFfy bUFfy bufFy BuFFY buffy bUffy buFfY buffY BuFfy buFfy bUFFy bUfFY buffY buFfY Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 65. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas ist eigentlich Perl? Acme::DoubleHelix use Acme::DoubleHelix; CG T--A A---T A----T C----G T----A A---T Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 66. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl mit PPI parsen PPI im Einsatz #!/usr/bin/perl use strict; use warnings; use PPI; use PPI::Dumper; my $ppi = PPI::Document-new($0); my $dumper = PPI::Dumper-new($ppi); $dumper-print(); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 67. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnBaum eines Perl-Programms Baum eines Perl-Programms PPI::Document PPI::Token::Comment #!/usr/bin/perln PPI::Token::Whitespace n PPI::Statement::Include PPI::Token::Word use PPI::Token::Whitespace PPI::Token::Word strict PPI::Token::Structure ; PPI::Token::Whitespace n [...] Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 68. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnEine neue Regel Wir brauchen eine Regel: Methodenaufrufe müssen immer runde Klammern haben. Beispielcode my $obj = CGI-new; print $obj-header(); print $obj-start_html( -css = hallo.css ); my $hashref = { key = value }; print $hashref-{key}; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 69. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnMehr Infos... ungültig my $obj = CGI-new; PPI-Dump PPI::Token::Word CGI PPI::Token::Operator - PPI::Token::Word new PPI::Token::Structure ; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 70. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnMehr Infos... gültig print $obj-header(); PPI-Dump PPI::Token::Symbol $obj PPI::Token::Operator - PPI::Token::Word header PPI::Structure::List ( ... ) PPI::Token::Structure ; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 71. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnMehr Infos... gültig print $obj-start_html( css = hallo.css ); PPI-Dump PPI::Token::Symbol $obj PPI::Token::Operator - PPI::Token::Word start_html PPI::Structure::List ( ... ) PPI::Token::Whitespace PPI::Statement::Expression [...] PPI::Token::Structure ; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 72. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnMehr Infos... uninteressant $hashref-{key}; .. $arrayref-[1]; Das sind einfach Dereferenzierungen... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 73. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnMehr Infos... PPI-Dump PPI::Token::Symbol $hashref PPI::Token::Operator - PPI::Structure::Subscript { ... } PPI::Statement::Expression PPI::Token::Word key PPI::Token::Structure ; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 74. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 75. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 76. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnWas wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 77. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Die Regel package Perl::Critic::Policy::OTRS::RequireParensWithMethods; use strict; use warnings; use Perl::Critic::Utils qw{ :severities :classification :ppi }; use base Perl::Critic::Policy; use Readonly; our $VERSION = 0.01; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 78. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Die Regel Readonly::Scalar my $DESC = q{Method invokation should use ()}; Readonly::Scalar my $EXPL = q{Use -MethodName() instead of -MethodName.}; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 79. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Die Regel sub supported_parameters { return; } sub default_severity { return $SEVERITY_HIGHEST; } sub default_themes { return qw( otrs ) } sub applies_to { return PPI::Token::Operator } Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 80. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Die Regel sub violates { my ( $self, $elem ) = @_; return if $elem ne -; my $method = $elem-snext_sibling; return if ref $method eq PPI::Structure::Subscript; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 81. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Die Regel my $list = $method-snext_sibling; return if ref $list eq PPI::Structure::List; return $self-violation( $DESC, $EXPL, $elem ); } 1; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 82. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnPerl::Critic Regel Zusammenfassung eigene Regeln: erbt von Perl::Critic::Policy $DESC, $EXPL Methoden: default_severity, default_themes, applies_to violates Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 83. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDie eigene Regel testen Die eigene Regel kann einfach getestet werden: Neues Object von Perl::Critic erzeugen Neues Object von der Regel erzeugen Test laufen lassen Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 84. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDie eigene Regel testen Test der eigenen Regel use Test::More; use Perl::Critic; use Perl::Critic::Policy::OTRS::RequireParensWithMethods; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 85. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDie eigene Regel testen Test der eigenen Regel my @valid = ( CGI-new();, $obj-method();, ); my @invalid = ( CGI-new;, $obj-method;, ); plan tests = @valid + @invalid; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 86. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDie eigene Regel testen Test der eigenen Regel my $c = Perl::Critic-new( -profile = NONE ); my $policy = Perl::Critic::Policy::OTRS::RequireParensWithMethods-new; $c-add_policy( -policy = $policy ); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 87. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnDie eigene Regel testen Test der eigenen Regel ok( (scalar $c-critique( $_ )) == 0, valid ) for @valid; ok( (scalar $c-critique( $_ )) 0, invalid ) for @invalid; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 88. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnEigene Perl::Critic Regeln Wie zu sehen war, ist Perl::Critic ein nützliches Tool, um Programmierregeln durchzusetzen. Eigene Regeln sind einfach umzusetzen. Es gibt keine Entschuldigung mehr, unleserlichen Code zu schreiben ;-) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 89. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene RegelnVielen Dank! Vielen Dank! Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein