Wenn Sie ein Linux-Systemadministrator sind, der gelegentlich Perl-Code schreibt (oder) ein Entwickler ist, der die Programmiersprache Perl lernen möchte , diese 20 grundlegenden Perl-Programmiertipps und Tricks, die in diesem Artikel erklärt werden, geben Ihnen eine Starthilfe.
1. Alle installierten Perl-Module von der Unix-Befehlszeile auflisten
Holen Sie sich eine Liste aller installierten Perl-Module wie unten gezeigt.
$ perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/Filter.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/LinkExtor.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/PullParser.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/Parser.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/TokeParser.pm .....
Im obigen Beispiel
- Datei::Suchen und File::Spec::Functions module werden verwendet, um alle installierten Module aufzulisten.
- M-Option lädt das Modul. Es führt use module aus bevor das Skript ausgeführt wird
- -T-Option aktiviert die Taint-Überprüfung, die Perl anweist, die Daten des Benutzers zu verfolgen und zu vermeiden, etwas Unsicheres damit zu tun. Hier wird diese Option verwendet, um zu vermeiden, dass der aktuelle Verzeichnisname aus dem übernommen wird @INC-Variable und rekursives Auflisten der verfügbaren .pm-Dateien aus dem Verzeichnis.
- -l-Option aktiviert die automatische Zeilenende-Verarbeitung in der Ausgabe. Bei Druckanweisungen wird das neue Zeilentrennzeichen (\n) am Ende jeder Zeile hinzugefügt.
- -w-Option druckt alle Warnmeldungen.
- -e-Option gibt an, dass die folgende Zeichenfolge als Perl-Skript (d. h. Befehlsfolge) interpretiert werden soll.
2. Alle installierten Perl-Module aus einem Perl-Skript auflisten (unter Verwendung des ExtUtils::Installed-Pakets)
Verwenden Sie das folgende Perl-Code-Snippet, um eine Liste der installierten Perl-Module zu erhalten.
my $Inst = ExtUtils::Installed->new(); my @Modules = $Inst->modules(); print "Current List of Installed PERL Modules:\n\n"; foreach my $mod(@Modules){ print "$mod\n"; }
Hinweis :Das Modul ExtUtils::Installed ist nicht mit dem Perl-Programm vorinstalliert. Sie sollten es also von cpan installieren.
3. Perl-Module mit dem Perldoc-Befehl auflisten
perldoc perlmodlib listet alle Module auf, die mit dem Perl-Programm vorinstalliert sind.
$ perldoc perlmodlib Attribute::Handlers Simpler definition of attribute handlers AutoLoader Load subroutines only on demand .........
Hinweis: Sie können auch den Befehl „perldoc perllocal“ verwenden, um zusätzliche installierte Perl-Module zu identifizieren.
$ perldoc perllocal
Der Befehl perldoc perllocal listet alle im System installierten optionalen Module mit den folgenden Informationen auf:
- Installationsdatum
- Verzeichnisort, wo das Perl-Modul installiert ist
- Versionsnummer des Perl-Moduls
- usw.,
4. Sehen Sie sich die Perl-Dokumentation über die Unix-Befehlszeile an
Sie können entweder den perldoc- oder den man-Befehl verwenden, um Hilfe zu einem bestimmten Perl-Modul zu erhalten, wie unten gezeigt.
$ perldoc Regexp::Common (or) $ man Regexp::Common
Wenn das Perl-Dokument nicht ausreicht, verwenden Sie die Perldoc-Option -m, um sowohl den Quellcode als auch die unformatierte Pod-Dokumentation des angegebenen Perl-Moduls anzuzeigen.
$ perldoc -m Regexp::Common
Um die Dokumentation zu einer bestimmten Perl-Funktion anzuzeigen, verwenden Sie die Option -f, wie unten gezeigt.
$ perldoc -f splice
5. Sehen Sie sich die Perl-Online-Dokumentation an (oder laden Sie sie zur Offline-Nutzung herunter)
Viele ausgezeichnete Perl-Tutorials sind online unter Perl-Programmierdokumentation verfügbar.
Von dieser Website können Sie auch die HTML- oder PDF-Version der Perl-Dokumentation zur Offline-Anzeige herunterladen.
- Vollversion (enthält HTML- und PDF-Dateien) – perldoc.tar.gz
- Lite-Version (enthält nur HTML-Dateien) – perldoc-html.tar.gz
6. Perl-Dokumentation mit Podbrowser lesen
Laden Sie den Podbrowser herunter. Sie können die installierten Perl-Module, -Funktionen und die Perl-Dokumentation visuell vom Podbrowser aus durchsuchen. Von ihrer Website:
PodBrowser is a documentation browser for Perl. You can view, search and print documentation for Perl's builtin functions, its "perldoc" pages, pragmatic modules and the default and user-installed modules.
Hinweis: Sie können den Vim-Editor auch als Perl-IDE verwenden, wie wir bereits besprochen haben.
7. CPAN-Modulkonfiguration manuell ändern
Um die Perl-Module von der Linux-Befehlszeile aus zu installieren, verwenden Sie CPAN. Wir haben bereits darüber gesprochen, wie man Perl-Module installiert – sowohl manuell als auch mit dem CPAN-Befehl.
Wenn Sie das Perl-Modul CPAN ( perl -MCPAN ) zum ersten Mal verwenden, wird ein Skript ausgeführt, um mehrere Optionen zu konfigurieren. Beispielsweise konfiguriert es den Speicherort von tar-, gzip- und unzip-Dateien, die Cache-Größe für das Build-Verzeichnis, den Speicherort der Quelldatei usw.,
Um die Konfigurationsdateien des CPAN-Moduls manuell neu zu konfigurieren, können Sie eine der folgenden Dateien bearbeiten.
- ~/.cpan/CPAN/MyConfig.pm – Benutzerspezifische Perl-CPAN-Konfigurationsdatei
- /etc/perl/CPAN/Config.pm – Die systemweite Perl-CPAN-Konfigurationsdatei wird irgendwo im Verzeichnisbaum des Perl-Moduls gespeichert.
$ vim ~/.cpan/CPAN/MyConfig.pm (and / or) $ vim /etc/perl/CPAN/Config.pm
8. CPAN-Modulkonfigurationen interaktiv ändern
Starten Sie die cpan-Shell wie unten gezeigt und führen Sie o conf init aus , das Sie fragt:„Sind Sie bereit für die manuelle Konfiguration?“, geben Sie Ihre Option ( Ja / Nein ) an, um fortzufahren. Dies listet alle Konfigurationsparameter zusammen mit ihrem Wert auf.
$ perl -MCPAN -e shell cpan> o conf init cpan> o conf
9. Überprüfen Sie, ob ein Perl-Modul installiert ist
Wenn Sie wissen möchten, ob ein Perl-Modul (z. B. Regexp::Common) installiert ist, führen Sie den folgenden Befehl aus. Wenn Sie "1" erhalten als Ausgabe wird dann das angegebene Perl-Modul installiert. Wenn nicht, erhalten Sie die unten gezeigte Fehlermeldung.
$ perl -MRegexp::Common -le 'print 1' Can't locate Regexp/Common.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .).
Hinweis: Sie können auch mit dem Befehl perldoc oder man überprüfen, ob das Perl-Modul installiert ist. Wenn das Perl-Modul installiert ist, wird die Handbuchseite des Moduls erfolgreich geöffnet. Wenn nicht, wird „keine Anleitung/Dokumentation für dieses Modul gefunden“ angezeigt
$ perldoc Regexp::Common $ man Regexp::Common
10. Listen Sie die Verzeichnisse auf, in denen sich Perl-Module befinden
Das Perl-Array @INC enthält die Liste der Orte, an denen die Konstrukte „do EXPR“, „require“ oder „use“ nach ihren Bibliotheksdateien suchen. Der folgende Einzeiler zeigt den Inhalt des @INC-Perl-Arrays:
$ perl -e 'foreach $folder (@INC) { print "$folder\n";}'
11. Überprüfen Sie die Version eines installierten Perl-Moduls
Verwenden Sie den folgenden Befehl, um die Versionsnummer eines Moduls zu überprüfen.
#-- check the version number of CGI module $ perl -MCGI -e 'print "$CGI::VERSION \n"' #-- check the version number of Regexp::Common module $ perl -MRegexp::Common -e 'print "$Regexp::Common::VERSION \n"'
Hinweis: Lesen Sie auch unbedingt unsere Rezension über das Perl Best Practices-Buch.
12. Geben Sie die zu verwendende Mindestversion des Perl-Moduls an
Manchmal möchten Sie vielleicht eine bestimmte Version eines Perl-Moduls in Ihrem Programm verwenden. Um die Verwendung früherer Versionen dieses Moduls zu vermeiden, fügen Sie die gewünschte Mindestversionsnummer in die use ‘module’-Anweisung ein, wie unten gezeigt.
#-- Use version 5.8 of later of module LWP use LWP 5.8
Hinweis: Ihr Perl-Programm wird mit einer entsprechenden Fehlermeldung beendet, wenn die installierte Modulversion niedriger ist als die Version, die Sie im use-Befehl angegeben haben.
13. Nützliche Perl-Module zum Entwickeln von Webanwendungen
Wenn Sie eine Webanwendung entwickeln, sollten Sie die Verwendung der folgenden Perl-Module in Erwägung ziehen.
- CGI – Allzweckmodul zum Erstellen von Webseiten
- Vorlage – Template Toolkit zur Generierung dynamischer Webinhalte
- LWP – LWP wird zum Abrufen von Webinhalten verwendet
- WWW::Mechanisieren – Verwenden Sie dies, um die Interaktion mit einer Website zu automatisieren
14. Ermitteln Sie das Betriebssystem, unter dem das Perl-Skript ausgeführt wird
Der Name des zugrunde liegenden Betriebssystems wird in der Variablen $^O gespeichert. Im Folgenden sind einige der üblichen $^O-Werte
aufgeführt- Linux – Linux
- MSWin32 – Windows
- aix – AIX
- solaris – Solaris
Hinweis: Der in $^O gespeicherte Wert enthält nur den Namen des Betriebssystems, nicht die Versionsnummer. Um die Versionsnummer zu ermitteln, sollten Sie POSIX::uname() aus dem POSIX-Paket verwenden.
15. Definieren Sie konstante Werte innerhalb eines Perl-Skripts
Der beste Weg, konstante Werte zu definieren, ist die Verwendung von Perl Readonly oder Konstante Modul wie unten gezeigt.
use Readonly; Readonly my $PI => 3.1415926535; (or) use Constant PI => 3.1415926535;
Bitte beachten Sie Folgendes:
- Mit dem Readonly-Modul können Sie Readonly-Skalare, Hashes und Arrays definieren.
- Wenn Sie versuchen, eine Readonly-Variable zu ändern, stirbt das Programm.
16. Ermitteln Sie den Betriebssystembenutzer und/oder die Betriebssystemgruppe, die ein Perl-Skript ausführen
Verwenden Sie die folgenden vordefinierten Variablen, um die Benutzer- und Gruppeninformationen des aktuellen Prozesses abzurufen:
- $< – echte Benutzer-ID (uid); eindeutiger Wert
- $> – effektive Benutzer-ID (euid); eindeutiger Wert
- $( – echte Gruppen-ID (gid); Liste (durch Leerzeichen getrennt) von Gruppen
- $) – effektive Gruppen-ID (egid); Liste (durch Leerzeichen getrennt) von Gruppen
Bitte beachten Sie Folgendes:
- Diese Informationen gelten nur für Unix-Systeme
- Die Werte, die diese Variablen enthalten, sind ganze Zahlen.
- Um die Benutzer- und Gruppennamen zu erhalten, verwenden Sie „(getpwuid($<))[0]“ (für Benutzerinformationen) und „getgrgid($()“ (für Gruppen).
17. Ausführen externer Befehle
Wie unten erklärt, gibt es viele Möglichkeiten, externe Befehle von Perl auszuführen.
- system() – Sie möchten einen Befehl ausführen und dessen Ausgabe nicht erfassen
- exe – Sie möchten nicht zum aufrufenden Perl-Skript zurückkehren
- Backticks – Sie möchten die Ausgabe des Befehls erfassen
- öffnen – Sie möchten den Befehl (als Eingabe oder Ausgabe) an Ihr Perl-Skript weiterleiten
18. Analysieren Sie einfaches unordentliches Perl-Skript mit B::Deparse
Haben Sie einen Haufen verschleierten oder einfach nur unordentlichen und schwer lesbaren Perl-Code? Die B::Deparse Modul kann helfen. Es kompiliert und dekompiliert dann das ihm übergebene Programm, erweitert es und formatiert es schön. Es entfernt die im Perl-Programm geschriebenen Kommentarzeilen.
Um es in der Befehlszeile auszuführen, geben Sie „perl -MO=Deparse prog.pl“ ein. Hier ist ein Beispiel für seine Verwendung,
Erstellen Sie zuerst das Eingabeprogramm:
$ cat scary.pl for(74,117,115,116){$::a.=chr};(($_.='qwertyui')&& (tr/yuiqwert/her anot/))for($::b);for($::c){$_.=$^X; /(p.{2}l)/;$_=$1}$::b=~/(..)$/;print("$::a$::b $::c hack$1.");
Übergeben Sie das Perl-Skript scary.pl an das Deparse-Modul
$ perl -MO=Deparse scary.pl foreach $_ (74, 117, 115, 116) { $a .= chr $_; } ; $_ .= 'qwertyui' and tr/eiqrtuwy/nr oteah/ foreach ($b); foreach $_ ($c) { $_ .= $^X; /(p.{2}l)/; $_ = $1; } $b =~ /(..)$/; print "$a$b $c hack$1."; scary.pl syntax OK
19. Installierte DBI-Treiber auflisten
DBI ist das Standard-Datenbankschnittstellenmodul für Perl. Das folgende Perl-Programm gibt eine Liste aller installierten DBI-Treiber aus.
use strict; use warnings; use DBI; print map "$_\n",DBI->available_drivers;
Beispielausgabe des obigen Programms:
DBM ExampleP File Proxy Sponge mysql
Wenn der benötigte Treiber nicht installiert ist, verwenden Sie CPAN, um das richtige DBD-Modul (Datenbanktreiber) zu finden.
20. Spezielle Variable für reguläre Ausdrücke
Eine der nützlichsten Funktionen oder die leistungsstärkste Möglichkeit zur String-Manipulation in Perl ist der reguläre Ausdruck.
Das Herzstück davon ist der reguläre Ausdruck, der von vielen anderen UNIX-Hilfsprogrammen geteilt wird.
Perl hat eine Menge spezieller Variablen, die nach jeder m//- oder s///-Regex-Übereinstimmung gefüllt werden.
- $1, $2, $3 usw. enthalten die Rückwärtsreferenzen.
- $+ enthält die letzte (höchstnummerierte) Rückwärtsreferenz.
- $&(Dollar kaufmännisches Und) enthält die gesamte Regex-Übereinstimmung.
- $’ (Dollar gefolgt von einem Apostroph oder einfachen Anführungszeichen) enthält den Teil der Zeichenfolge nach (rechts neben) der Regex-Übereinstimmung.
- $` (Dollar-Backtick) enthält den Teil der Zeichenfolge vor (links von) der Regex-Übereinstimmung.
Die Verwendung dieser Variablen wird in Perl-Skripten nicht empfohlen, wenn es auf die Leistung ankommt, da dies dazu führt, dass Perl alles verlangsamt Regex-Übereinstimmungen in Ihrem gesamten Perl-Skript.
Alle diese Variablen sind schreibgeschützt und bleiben bestehen, bis der nächste Regex-Abgleich versucht wird.
Beispiel
$string = "This is the geek stuff article for perl learner"; $string =~ /the (g.*) stuff(.*) /; print "Matched String=>$&\nBefore Match=>$`\nAfter Match=>$'\nLast Paren=>$+\nFirst Paren=>$1\n";
Ausgabe des obigen Beispiels:
Matched String=>the geek stuff article for perl Before Match=>This is After Match=>learner Last Paren=> article for perl First Paren=>geek