Motivation:

As you can see from my earlier posts I got over the last couple of month a little bit in contact with Perl as a script language being used as a substitution for the old Dos-/Windows batch processor for some general script based tasks and in special for creating an automatic and full customizable build system for a larger Visual C++ project with a bunch of targets and some resulting distribution packages (installers and zip-archives).

For practicing purposes I invested a bit time in investigating about the OOP-features of Perl. When you read about it in the internet a lot of people share the opinion that Perl’s default OOP-support works well, but it requires a lot of tedious work for the programmer to set up a class. They recommend you to give Moose a try, which is a relatively new module of Perl. It promises to make OOP under Perl easy and is already deployed in production by some real companies.

To learn Moose by doing I decided to program a little script which mimics in a smaller feature subset the possibilities of the UNIX console program “find” as I know it from my earlier days. It should give me under Windows (and of course under other OSes where Perl is available too) the possibility to do a recursive file search using some include- and exclude-filters and let on the result set happen some actions like “print”, “put to an archive” or “clean the matching” files.

ffind.pl:

The resulting script has the name ffind.pl (file find).  Here are some examples for using it on the Windows command line:

1
2
3
4
5
6
7
8
9
10
11
REM Match in users temp dir all items whose name contains 
REM substring ‘pic’ except the gifs and jpgs:
perl ffind.pl C:\Users\daniel\Temp -ni "*pic*" -ne "*.gif,*.png"

REM Create a zip-archive of all text files w. automatic current 
REM timestamp name in dir ‘c:\users\daniel\backups’:
perl ffind.pl ./ -ni “*.txt” –zip “c:\users\daniel\backups”

REM Delete / clean all object files. Don’t display file deletion
REM warning / confirmation:
perl ffind.pl ./ -ni “*.o,*.obj” -fclean

View / download the files and the final conclusion:

I wrote a little blog post report about the implementation of ffind.pl as a pdf. The addressed topics can best be described by the following tags:

  • Perl
  • OOP
  • Moose
  • Software Tests
  • Test::More
  • Command line Parsing
  • Options
  • Getopt::Long

You can view/download it here plus the script (of course) and a little directory tree of empty files and folders for testing the script:

My final conclusion about Moose & Perl:

Finally it’s a nice addition to Perl to have the possibility to leverage now the powers of OOP more easily once you have managed to overcome the first obstacles of Moose. In detail if you have made a mistake it’s not easy to get known from the error message the real cause of the error. But so far I guess that’s more a general problem of Perl, not Moose 😉 So if you have the choice you might want to give Python a try as it is object oriented by design and a lot easier to learn without being less powerful than Perl.

Hier eine Rezension zu dem Buch Einführung in Perl:

Einführung in Perl

Einführung in Perl

Die Programmiersprache Perl bietet kurze Konstrukte für schnelle Lösungen von Problemen, die in der Text- und Skriptverarbeitung häufig vorkommen. Dazu zählen auch, aber nicht nur, dass Arbeiten mit Verzeichnissen und Dateien und das Lesen und Schreiben von Textdateien. Eine besondere Stärke von Perl ist hierbei, dass reguläre Ausdrücke bereits in der Sprache integriert sind. So effizient sich mit dieser Sprache derartige Probleme lösen lassen, so schwierig ist jedoch für den Einsteiger, das Erlernen der Sprache, da viele einzelne Zeichen eine Bedeutung haben und dadurch die Grammatik der Sprache komplexer als zum Beispiel von Java, Javascript oder PHP ist. Erschwerend kommt noch hinzu, dass es in Perl vordefinierte Variablen gibt. Wenn man diese nicht kennt, ist der Code noch schwieriger zu verstehen. Außerdem kann eine Variable im Listenkontext oder im Datenkontext benutzt werden. Aus den genannten Gründen ist das Erlernen der Sprache ohne ein Buch wie dem vorliegenden sehr schwierig. Ich habe bereits einige Erfahrung in C++ und auch ein paar Jahre PHP programmiert. Mit diesem Buch war ich nach vier Tagen in der Lage produktiven Code in Perl  für ein automatisiertes Buildsystem für ein C++ Projekt zuschreiben. Softwareentwickler, die bereits in anderen Sprachen Erfahrung haben, sollten mit diesem Buch gut über die Runden kommen. Neben der Beschreibung der Perl-Syntax und den Bibliotheken von Perl, die man wohl immer braucht ist auch eine Einführung zu regulären Ausdrücken enthalten. Dieses Wissen ist dann auch jenseits von Perl von großem Nutzen. Zu jedem Kapitel gibt es Übungsaufgaben mit Lösungen. Ich kann dieses Buch sehr empfehlen und würde es mir wieder kaufen. Dieses Buch ist jedoch kein Kompendium, sondern nur eine Hilfe zum Einstieg in die Sprache, den Grundlagen und den Aufgaben, die wohl mehr oder weniger zu jedem Skript gehören.

Gruß, Daniel.