Perl - Kurzanleitung

Perl ist eine universelle Programmiersprache, die ursprünglich für die Textmanipulation entwickelt wurde und jetzt für eine Vielzahl von Aufgaben verwendet wird, darunter Systemadministration, Webentwicklung, Netzwerkprogrammierung, GUI-Entwicklung und mehr.

Was ist Perl?

  • Perl ist eine stabile, plattformübergreifende Programmiersprache.

  • Obwohl Perl offiziell kein Akronym ist, wurde es nur von wenigen verwendet Practical Extraction and Report Language.

  • Es wird für unternehmenskritische Projekte im öffentlichen und privaten Sektor eingesetzt.

  • Perl ist eine Open Source- Software, die unter ihrer Artistic License oder der GNU General Public License (GPL) lizenziert ist .

  • Perl wurde von Larry Wall erstellt.

  • Perl 1.0 wurde 1987 für die alt.comp.sources von Usenet veröffentlicht.

  • Zum Zeitpunkt des Schreibens dieses Tutorials war die neueste Version von Perl 5.16.2.

  • Perl ist im Oxford English Dictionary aufgeführt .

Das PC Magazine gab Perl als Finalisten für den Technical Excellence Award 1998 in der Kategorie Development Tool bekannt.

Perl-Funktionen

  • Perl nutzt die besten Funktionen aus anderen Sprachen wie C, awk, sed, sh und BASIC.

  • Perls Datenbankintegrationsschnittstelle DBI unterstützt Datenbanken von Drittanbietern, darunter Oracle, Sybase, Postgres, MySQL und andere.

  • Perl arbeitet mit HTML, XML und anderen Auszeichnungssprachen.

  • Perl unterstützt Unicode.

  • Perl ist Y2K-konform.

  • Perl unterstützt sowohl prozedurale als auch objektorientierte Programmierung.

  • Perl ist über XS oder SWIG mit externen C / C ++ - Bibliotheken verbunden.

  • Perl ist erweiterbar. Über das Comprehensive Perl Archive Network ( CPAN ) stehen über 20.000 Module von Drittanbietern zur Verfügung .

  • Der Perl-Interpreter kann in andere Systeme eingebettet werden.

Perl und das Web

  • Perl war aufgrund seiner Textbearbeitungsfunktionen und seines schnellen Entwicklungszyklus die beliebteste Webprogrammiersprache.

  • Perl ist weithin als " Klebeband des Internets " bekannt.

  • Perl kann verschlüsselte Webdaten verarbeiten, einschließlich E-Commerce-Transaktionen.

  • Perl kann in Webserver eingebettet werden, um die Verarbeitung um bis zu 2000% zu beschleunigen.

  • Mit mod_perl von Perl kann der Apache-Webserver einen Perl-Interpreter einbetten.

  • Das DBI- Paket von Perl erleichtert die Integration von Webdatenbanken.

Perl wird interpretiert

Perl ist eine interpretierte Sprache, was bedeutet, dass Ihr Code unverändert ausgeführt werden kann, ohne dass eine Kompilierungsphase durchgeführt wird, in der ein nicht portierbares ausführbares Programm erstellt wird.

Herkömmliche Compiler konvertieren Programme in Maschinensprache. Wenn Sie ein Perl-Programm ausführen, wird es zuerst in einen Bytecode kompiliert, der dann (während das Programm ausgeführt wird) in Maschinenanweisungen konvertiert wird. Es ist also nicht ganz dasselbe wie Muscheln oder Tclstrictly ohne Zwischendarstellung interpretiert.

Es ist auch nicht wie bei den meisten Versionen von C oder C ++, die direkt in ein maschinenabhängiges Format kompiliert werden. Es liegt irgendwo dazwischen, zusammen mit Python und awk und Emacs .elc Dateien.

Bevor wir mit dem Schreiben unserer Perl-Programme beginnen, sollten wir uns mit dem Einrichten unserer Perl-Umgebung vertraut machen. Perl ist auf einer Vielzahl von Plattformen verfügbar -

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX usw.)
  • Gewinnen Sie 9x / NT / 2000 /
  • WinCE
  • Macintosh (PPC, 68 KB)
  • Solaris (x86, SPARC)
  • OpenVMS
  • Alpha (7.2 und höher)
  • Symbian
  • Debian GNU / kFreeBSD
  • MirOS BSD
  • Und viele mehr...

Dies ist wahrscheinlicher, dass auf Ihrem System Perl installiert ist. Geben Sie einfach den folgenden Befehl an der Eingabeaufforderung $ ein:

$perl -v

Wenn Sie Perl auf Ihrem Computer installiert haben, erhalten Sie folgende Meldung:

This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Wenn Sie Perl noch nicht installiert haben, fahren Sie mit dem nächsten Abschnitt fort.

Perl-Installation erhalten

Der aktuellste und aktuellste Quellcode, Binärdateien, Dokumentationen, Nachrichten usw. sind auf der offiziellen Website von Perl verfügbar.

Perl Official Website - - https://www.perl.org/

Sie können die Perl-Dokumentation von der folgenden Site herunterladen.

Perl Documentation Website - - https://perldoc.perl.org

Installieren Sie Perl

Die Perl-Distribution ist für eine Vielzahl von Plattformen verfügbar. Sie müssen nur den für Ihre Plattform geltenden Binärcode herunterladen und Perl installieren.

Wenn der Binärcode für Ihre Plattform nicht verfügbar ist, benötigen Sie einen C-Compiler, um den Quellcode manuell zu kompilieren. Das Kompilieren des Quellcodes bietet mehr Flexibilität bei der Auswahl der Funktionen, die Sie für Ihre Installation benötigen.

Hier finden Sie eine kurze Übersicht über die Installation von Perl auf verschiedenen Plattformen.

Unix- und Linux-Installation

Hier sind die einfachen Schritte zum Installieren von Perl auf einem Unix / Linux-Computer.

  • Öffnen Sie einen Webbrowser und gehen Sie zu https://www.perl.org/get.html.

  • Folgen Sie dem Link, um den für Unix / Linux verfügbaren komprimierten Quellcode herunterzuladen.

  • Herunterladen perl-5.x.y.tar.gz Datei und geben Sie die folgenden Befehle an der Eingabeaufforderung $ aus.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

NOTE - Hier ist $ eine Unix-Eingabeaufforderung, an der Sie Ihren Befehl eingeben. Stellen Sie daher sicher, dass Sie $ nicht eingeben, während Sie die oben genannten Befehle eingeben.

Dadurch wird Perl an einem Standardspeicherort / usr / local / bin installiert, und seine Bibliotheken werden in / usr / local / lib / perlXX installiert , wobei XX die von Ihnen verwendete Perl-Version ist.

Es wird eine Weile dauern, bis der Quellcode nach der Ausgabe des kompiliert ist makeBefehl. Sobald die Installation abgeschlossen ist, können Sie Probleme habenperl -vBefehl an der Eingabeaufforderung $, um die Perl-Installation zu überprüfen. Wenn alles in Ordnung ist, wird die oben gezeigte Meldung angezeigt.

Windows-Installation

Hier sind die Schritte zum Installieren von Perl auf einem Windows-Computer.

  • Folgen Sie dem Link für die Installation von Strawberry Perl unter Windows http://strawberryperl.com

  • Laden Sie entweder die 32-Bit- oder die 64-Bit-Version der Installation herunter.

  • Führen Sie die heruntergeladene Datei aus, indem Sie im Windows Explorer darauf doppelklicken. Dadurch wird der Perl-Installationsassistent aufgerufen, der sehr einfach zu bedienen ist. Akzeptieren Sie einfach die Standardeinstellungen, warten Sie, bis die Installation abgeschlossen ist, und Sie können loslegen!

Macintosh-Installation

Um eine eigene Version von Perl zu erstellen, benötigen Sie 'make', ein Teil der Apples-Entwicklertools, die normalerweise mit Mac OS-Installations-DVDs geliefert werden. Sie benötigen nicht die neueste Version von Xcode (die jetzt in Rechnung gestellt wird), um make zu installieren.

Hier sind die einfachen Schritte zum Installieren von Perl auf einem Mac OS X-Computer.

  • Öffnen Sie einen Webbrowser und gehen Sie zu https://www.perl.org/get.html.

  • Folgen Sie dem Link, um den für Mac OS X verfügbaren komprimierten Quellcode herunterzuladen.

  • Herunterladen perl-5.x.y.tar.gz Datei und geben Sie die folgenden Befehle an der Eingabeaufforderung $ aus.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

Dadurch wird Perl an einem Standardspeicherort / usr / local / bin installiert, und seine Bibliotheken werden in / usr / local / lib / perlXX installiert , wobei XX die von Ihnen verwendete Perl-Version ist.

Perl ausführen

Im Folgenden finden Sie die verschiedenen Möglichkeiten zum Starten von Perl.

Interaktiver Dolmetscher

Sie können eingeben perlund starten Sie die Codierung sofort im interaktiven Interpreter, indem Sie sie über die Befehlszeile starten. Sie können dies unter Unix, DOS oder einem anderen System tun, das Ihnen einen Befehlszeileninterpreter oder ein Shell-Fenster bietet.

$perl  -e <perl code>           # Unix/Linux

or 

C:>perl -e <perl code>          # Windows/DOS

Hier ist die Liste aller verfügbaren Befehlszeilenoptionen -

Sr.Nr. Option & Beschreibung
1

-d[:debugger]

Führt das Programm unter dem Debugger aus

2

-Idirectory

Gibt das @ INC / # include-Verzeichnis an

3

-T

Aktiviert Verschmutzungsprüfungen

4

-t

Aktiviert Verschmutzungswarnungen

5

-U

Ermöglicht unsichere Vorgänge

6

-w

Aktiviert viele nützliche Warnungen

7

-W

Aktiviert alle Warnungen

8

-X

Deaktiviert alle Warnungen

9

-e program

Führt das als Programm gesendete Perl-Skript aus

10

file

Führt das Perl-Skript aus einer bestimmten Datei aus

Skript über die Befehlszeile

Ein Perl-Skript ist eine Textdatei, die Perl-Code enthält und über die Befehlszeile ausgeführt werden kann, indem der Interpreter in Ihrer Anwendung wie folgt aufgerufen wird:

$perl  script.pl          # Unix/Linux

or 

C:>perl script.pl         # Windows/DOS

Integrierte Entwicklungsumgebung

Sie können Perl auch in einer grafischen Benutzeroberfläche ausführen. Sie benötigen lediglich eine GUI-Anwendung auf Ihrem System, die Perl unterstützt. Sie können Padre, die Perl-IDE, herunterladen . Sie können auch das Eclipse Plugin EPIC - Perl Editor und IDE für Eclipse verwenden, wenn Sie mit Eclipse vertraut sind.

Bevor Sie mit dem nächsten Kapitel fortfahren, stellen Sie sicher, dass Ihre Umgebung ordnungsgemäß eingerichtet ist und einwandfrei funktioniert. Wenn Sie die Umgebung nicht ordnungsgemäß einrichten können, können Sie sich an Ihren Systemadministrator wenden.

Alle in den folgenden Kapiteln aufgeführten Beispiele wurden mit der Version 5.16.2 ausgeführt, die unter der CentOS-Version von Linux verfügbar ist.

Perl leiht Syntax und Konzepte aus vielen Sprachen: awk, sed, C, Bourne Shell, Smalltalk, Lisp und sogar Englisch. Es gibt jedoch einige deutliche Unterschiede zwischen den Sprachen. Dieses Kapitel wurde entwickelt, um Sie schnell mit der in Perl erwarteten Syntax vertraut zu machen.

Ein Perl-Programm besteht aus einer Folge von Deklarationen und Anweisungen, die von oben nach unten ausgeführt werden. Mit Schleifen, Unterprogrammen und anderen Steuerstrukturen können Sie innerhalb des Codes herumspringen. Jede einfache Anweisung muss mit einem Semikolon (;) enden.

Perl ist eine Freiformsprache: Sie können sie nach Belieben formatieren und einrücken. Whitespace dient hauptsächlich zum Trennen von Token, im Gegensatz zu Sprachen wie Python, wo es ein wichtiger Teil der Syntax ist, oder Fortran, wo es unerheblich ist.

Erstes Perl-Programm

Programmierung im interaktiven Modus

Sie können Perl Interpreter mit verwenden -eOption in der Befehlszeile, mit der Sie Perl-Anweisungen über die Befehlszeile ausführen können. Versuchen wir etwas an der $ prompt wie folgt:

$perl -e 'print "Hello World\n"'

Diese Ausführung führt zu folgendem Ergebnis:

Hello, world

Skriptmodus-Programmierung

Angenommen, Sie befinden sich bereits in der Eingabeaufforderung $, öffnen wir eine Textdatei hello.pl mit dem vi- oder vim-Editor und fügen die folgenden Zeilen in Ihre Datei ein.

#!/usr/bin/perl

# This will print "Hello, World"
print "Hello, world\n";

Hier /usr/bin/perlIst aktuell die Perl-Interpreter-Binärdatei. Bevor Sie Ihr Skript ausführen, müssen Sie den Modus der Skriptdatei ändern und Ausführungsberechtigungen erteilen. Im Allgemeinen funktioniert die Einstellung 0755 einwandfrei, und schließlich führen Sie das obige Skript wie folgt aus:

$chmod 0755 hello.pl $./hello.pl

Diese Ausführung führt zu folgendem Ergebnis:

Hello, world

Sie können Klammern für Funktionsargumente verwenden oder sie nach Ihrem persönlichen Geschmack weglassen. Sie sind nur gelegentlich erforderlich, um die Vorrangfragen zu klären. Die folgenden zwei Aussagen führen zum gleichen Ergebnis.

print("Hello, world\n");
print "Hello, world\n";

Perl-Dateierweiterung

Ein Perl-Skript kann in jedem normalen einfachen Texteditorprogramm erstellt werden. Für jeden Plattformtyp stehen verschiedene Programme zur Verfügung. Es gibt viele Programme für Programmierer, die im Internet heruntergeladen werden können.

Als Perl-Konvention muss eine Perl-Datei mit der Dateierweiterung .pl oder .PL gespeichert werden, um als funktionierendes Perl-Skript erkannt zu werden. Dateinamen können Zahlen, Symbole und Buchstaben enthalten, dürfen jedoch kein Leerzeichen enthalten. Verwenden Sie an Stellen mit Leerzeichen einen Unterstrich (_).

Kommentare in Perl

Kommentare in jeder Programmiersprache sind Freunde von Entwicklern. Kommentare können verwendet werden, um das Programm benutzerfreundlich zu gestalten. Sie werden vom Interpreter einfach übersprungen, ohne die Codefunktionalität zu beeinträchtigen. Zum Beispiel im obigen Programm eine Zeile, die mit Hash beginnt# ist ein Kommentar.

Einfach gesagt, Kommentare in Perl beginnen mit einem Hash-Symbol und laufen bis zum Ende der Zeile -

# This is a comment in perl

Zeilen, die mit = beginnen, werden als Beginn eines Abschnitts der eingebetteten Dokumentation (Pod) interpretiert, und alle nachfolgenden Zeilen bis zum nächsten Schnitt werden vom Compiler ignoriert. Es folgt das Beispiel -

#!/usr/bin/perl

# This is a single line comment
print "Hello, world\n";

=begin comment
This is all part of multiline comment.
You can use as many lines as you like
These comments will be ignored by the 
compiler until the next =cut is encountered.
=cut

Dies führt zu folgendem Ergebnis:

Hello, world

Leerzeichen in Perl

Ein Perl-Programm kümmert sich nicht um Leerzeichen. Das folgende Programm funktioniert einwandfrei -

#!/usr/bin/perl

print       "Hello, world\n";

Wenn sich jedoch Leerzeichen innerhalb der angegebenen Zeichenfolgen befinden, werden sie unverändert gedruckt. Zum Beispiel -

#!/usr/bin/perl

# This would print with a line break in the middle
print "Hello
          world\n";

Dies führt zu folgendem Ergebnis:

Hello
          world

Alle Arten von Leerzeichen wie Leerzeichen, Tabulatoren, Zeilenumbrüche usw. sind für den Interpreter gleichwertig, wenn sie außerhalb der Anführungszeichen verwendet werden. Eine Zeile, die nur Leerzeichen enthält, möglicherweise mit einem Kommentar, wird als Leerzeile bezeichnet, und Perl ignoriert sie vollständig.

Einfache und doppelte Anführungszeichen in Perl

Sie können doppelte oder einfache Anführungszeichen um Literalzeichenfolgen wie folgt verwenden:

#!/usr/bin/perl

print "Hello, world\n";
print 'Hello, world\n';

Dies führt zu folgendem Ergebnis:

Hello, world
Hello, world\n$

Es gibt einen wichtigen Unterschied zwischen einfachen und doppelten Anführungszeichen. Nur doppelte AnführungszeicheninterpolateVariablen und Sonderzeichen wie Zeilenumbrüche \ n, während einfache Anführungszeichen keine Variablen oder Sonderzeichen interpolieren. Überprüfen Sie das folgende Beispiel, in dem wir $ a als Variable verwenden, um einen Wert zu speichern und diesen Wert später zu drucken.

#!/usr/bin/perl

$a = 10; print "Value of a = $a\n";
print 'Value of a = $a\n';

Dies führt zu folgendem Ergebnis:

Value of a = 10
Value of a = $a\n$

"Hier" -Dokumente

Sie können mehrzeiligen Text bequem speichern oder drucken. Sogar Sie können Variablen im "hier" -Dokument verwenden. Im Folgenden finden Sie eine einfache Syntax. Überprüfen Sie sorgfältig, ob zwischen dem << und dem Bezeichner kein Leerzeichen stehen darf.

Ein Bezeichner kann entweder ein bloßes Wort oder ein zitierter Text sein, wie wir unten EOF verwendet haben. Wenn der Bezeichner in Anführungszeichen gesetzt ist, bestimmt die Art des verwendeten Anführungszeichens die Behandlung des Textes im Dokument hier, genau wie beim regulären Anführungszeichen. Ein nicht zitierter Bezeichner funktioniert wie doppelte Anführungszeichen.

#!/usr/bin/perl

$a = 10;
$var = <<"EOF"; This is the syntax for here document and it will continue until it encounters a EOF in the first line. This is case of double quote so variable value will be interpolated. For example value of a = $a
EOF
print "$var\n"; $var = <<'EOF';
This is case of single quote so variable value will be 
interpolated. For example value of a = $a EOF print "$var\n";

Dies führt zu folgendem Ergebnis:

This is the syntax for here document and it will continue
until it encounters a EOF in the first line.
This is case of double quote so variable value will be
interpolated. For example value of a = 10

This is case of single quote so variable value will be
interpolated. For example value of a = $a

Fluchtzeichen

Perl verwendet das Backslash-Zeichen (\), um alle Arten von Zeichen zu umgehen, die unseren Code beeinträchtigen könnten. Nehmen wir ein Beispiel, in dem wir doppelte Anführungszeichen und $ sign drucken möchten -

#!/usr/bin/perl

$result = "This is \"number\""; print "$result\n";
print "\$result\n";

Dies führt zu folgendem Ergebnis:

This is "number"
$result

Perl-Kennungen

Ein Perl-Bezeichner ist ein Name, mit dem eine Variable, Funktion, Klasse, ein Modul oder ein anderes Objekt identifiziert wird. Ein Perl-Variablenname beginnt entweder mit $, @ oder%, gefolgt von null oder mehr Buchstaben, Unterstrichen und Ziffern (0 bis 9).

Perl erlaubt keine Interpunktionszeichen wie @, $ und% in Bezeichnern. Perl ist eincase sensitiveProgrammiersprache. So$Manpower und $manpower sind zwei verschiedene Bezeichner in Perl.

Perl ist eine lose typisierte Sprache, und Sie müssen während der Verwendung in Ihrem Programm keinen Typ für Ihre Daten angeben. Der Perl-Interpreter wählt den Typ basierend auf dem Kontext der Daten selbst aus.

Perl verfügt über drei grundlegende Datentypen: Skalare, Arrays von Skalaren und Hashes von Skalaren, auch als assoziative Arrays bezeichnet. Hier finden Sie einige Details zu diesen Datentypen.

Sr.Nr. Typen & Beschreibung
1

Scalar

Skalare sind einfache Variablen. Vor ihnen steht ein Dollarzeichen ($). Ein Skalar ist entweder eine Zahl, eine Zeichenfolge oder eine Referenz. Eine Referenz ist eigentlich eine Adresse einer Variablen, die wir in den kommenden Kapiteln sehen werden.

2

Arrays

Arrays sind geordnete Listen von Skalaren, auf die Sie mit einem numerischen Index zugreifen, der mit 0 beginnt. Vor ihnen steht ein "at" -Zeichen (@).

3

Hashes

Hashes sind ungeordnete Sätze von Schlüssel / Wert-Paaren, auf die Sie mit den Schlüsseln als Index zugreifen. Vor ihnen steht ein Prozentzeichen (%).

Numerische Literale

Perl speichert alle Zahlen intern entweder als vorzeichenbehaftete Ganzzahlen oder als Gleitkommawerte mit doppelter Genauigkeit. Numerische Literale werden in einem der folgenden Gleitkomma- oder Ganzzahlformate angegeben:

Art Wert
Ganze Zahl 1234
Negative ganze Zahl -100
Gleitkomma 2000
Wissenschaftliche Schreibweise 16.12E14
Hexadezimal 0xffff
Oktal 0577

String-Literale

Zeichenfolgen sind Zeichenfolgen. Dies sind normalerweise alphanumerische Werte, die entweder durch einfache (') oder doppelte (") Anführungszeichen begrenzt sind. Sie funktionieren ähnlich wie UNIX-Shell-Anführungszeichen, bei denen Sie Zeichenfolgen in einfachen Anführungszeichen und Zeichenfolgen in doppelten Anführungszeichen verwenden können.

String-Literale mit doppelten Anführungszeichen ermöglichen eine variable Interpolation, Zeichenfolgen mit einfachen Anführungszeichen nicht. Es gibt bestimmte Zeichen, wenn sie mit einem Schrägstrich versehen sind, eine besondere Bedeutung haben und zur Darstellung wie Zeilenumbruch (\ n) oder Tabulator (\ t) verwendet werden.

Sie können Zeilenumbrüche oder eine der folgenden Escape-Sequenzen direkt in Ihre Zeichenfolgen in doppelten Anführungszeichen einbetten -

Fluchtabfolge Bedeutung
\\ Backslash
\ ' Einfaches Zitat
"" Doppeltes Zitat
\ein Alarm oder Glocke
\ b Rücktaste
\ f Formularvorschub
\ n Neue Zeile
\ r Wagenrücklauf
\ t Horizontale Registerkarte
\ v Vertikale Registerkarte
\ 0nn Erstellt oktalformatierte Zahlen
\ xnn Erstellt hexideciamal formatierte Zahlen
\ cX Steuert Zeichen, x kann ein beliebiges Zeichen sein
\ u Erzwingt das Großbuchstaben des nächsten Zeichens
\ l Erzwingt, dass das nächste Zeichen in Kleinbuchstaben geschrieben wird
\ U. Erzwingt, dass alle folgenden Zeichen in Großbuchstaben geschrieben werden
\ L. Erzwingt alle folgenden Zeichen in Kleinbuchstaben
\ Q. Backslash alle folgenden nicht alphanumerischen Zeichen
\ E. Beenden Sie \ U, \ L oder \ Q.

Beispiel

Mal sehen, wie sich Strings mit einfachen und doppelten Anführungszeichen verhalten. Hier verwenden wir in der obigen Tabelle erwähnte String-Escapezeichen und verwenden die skalare Variable, um String-Werte zuzuweisen.

#!/usr/bin/perl

# This is case of interpolation.
$str = "Welcome to \ntutorialspoint.com!";
print "$str\n"; # This is case of non-interpolation. $str = 'Welcome to \ntutorialspoint.com!';
print "$str\n"; # Only W will become upper case. $str = "\uwelcome to tutorialspoint.com!";
print "$str\n"; # Whole line will become capital. $str = "\UWelcome to tutorialspoint.com!";
print "$str\n"; # A portion of line will become capital. $str = "Welcome to \Ututorialspoint\E.com!"; 
print "$str\n"; # Backsalash non alpha-numeric including spaces. $str = "\QWelcome to tutorialspoint's family";
print "$str\n";

Dies führt zu folgendem Ergebnis:

Welcome to
tutorialspoint.com!
Welcome to \ntutorialspoint.com!
Welcome to tutorialspoint.com!
WELCOME TO TUTORIALSPOINT.COM!
Welcome to TUTORIALSPOINT.com!
Welcome\ to\ tutorialspoint\'s\ family

Variablen sind die reservierten Speicherplätze zum Speichern von Werten. Dies bedeutet, dass Sie beim Erstellen einer Variablen Speicherplatz im Speicher reservieren.

Basierend auf dem Datentyp einer Variablen weist der Interpreter Speicher zu und entscheidet, was im reservierten Speicher gespeichert werden kann. Durch Zuweisen verschiedener Datentypen zu Variablen können Sie daher Ganzzahlen, Dezimalstellen oder Zeichenfolgen in diesen Variablen speichern.

Wir haben erfahren, dass Perl die folgenden drei grundlegenden Datentypen hat:

  • Scalars
  • Arrays
  • Hashes

Dementsprechend werden wir in Perl drei Arten von Variablen verwenden. EINscalarVor der Variablen steht ein Dollarzeichen ($), in dem entweder eine Zahl, eine Zeichenfolge oder eine Referenz gespeichert werden kann. EinarrayVor der Variablen steht das Zeichen @ und es werden geordnete Listen von Skalaren gespeichert. Endlich dieHash Die Variable wird durch das Vorzeichen% vorangestellt und zum Speichern von Sätzen von Schlüssel / Wert-Paaren verwendet.

Perl verwaltet jeden Variablentyp in einem separaten Namespace. Sie können also ohne Angst vor Konflikten denselben Namen für eine skalare Variable, ein Array oder einen Hash verwenden. Dies bedeutet, dass $ foo und @foo zwei verschiedene Variablen sind.

Variablen erstellen

Perl-Variablen müssen nicht explizit deklariert werden, um Speicherplatz zu reservieren. Die Deklaration erfolgt automatisch, wenn Sie einer Variablen einen Wert zuweisen. Das Gleichheitszeichen (=) wird verwendet, um Variablen Werte zuzuweisen.

Beachten Sie, dass dies obligatorisch ist, um eine Variable zu deklarieren, bevor wir sie verwenden, wenn wir sie verwenden use strict Aussage in unserem Programm.

Der Operand links vom Operator = ist der Name der Variablen, und der Operand rechts vom Operator = ist der in der Variablen gespeicherte Wert. Zum Beispiel -

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

Hier sind 25, "John Paul" und 1445.50 die Werte, die den Variablen " Alter" , " Name" und " Gehalt " zugewiesen sind . In Kürze werden wir sehen, wie wir Arrays und Hashes Werte zuweisen können.

Skalare Variablen

Ein Skalar ist eine einzelne Dateneinheit. Diese Daten können eine Ganzzahl, ein Gleitkomma, ein Zeichen, eine Zeichenfolge, ein Absatz oder eine gesamte Webseite sein. Einfach zu sagen, es könnte alles sein, aber nur eine einzige Sache.

Hier ist ein einfaches Beispiel für die Verwendung skalarer Variablen:

#!/usr/bin/perl

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

print "Age = $age\n"; print "Name = $name\n";
print "Salary = $salary\n";

Dies führt zu folgendem Ergebnis:

Age = 25
Name = John Paul
Salary = 1445.5

Array-Variablen

Ein Array ist eine Variable, die eine geordnete Liste von Skalarwerten speichert. Array-Variablen wird ein "at" (@) vorangestellt. Um auf ein einzelnes Element eines Arrays zu verweisen, verwenden Sie das Dollarzeichen ($) mit dem Variablennamen, gefolgt vom Index des Elements in eckigen Klammern.

Hier ist ein einfaches Beispiel für die Verwendung von Array-Variablen:

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";

Hier haben wir das Escape-Zeichen (\) vor dem $ -Zeichen verwendet, um es zu drucken. Andere Perl verstehen es als Variable und drucken seinen Wert. Bei der Ausführung wird das folgende Ergebnis erzielt:

$ages[0] = 25
$ages[1] = 30 $ages[2] = 40
$names[0] = John Paul $names[1] = Lisa
$names[2] = Kumar

Hash-Variablen

Ein Hash ist eine Menge von key/valuePaare. Vor Hash-Variablen steht ein Prozentzeichen (%). Um auf ein einzelnes Element eines Hash zu verweisen, verwenden Sie den Namen der Hash-Variablen, gefolgt von dem "Schlüssel", der dem Wert in geschweiften Klammern zugeordnet ist.

Hier ist ein einfaches Beispiel für die Verwendung von Hash-Variablen:

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Dies führt zu folgendem Ergebnis:

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Variabler Kontext

Perl behandelt dieselbe Variable je nach Kontext unterschiedlich, dh in der Situation, in der eine Variable verwendet wird. Schauen wir uns das folgende Beispiel an:

#!/usr/bin/perl

@names = ('John Paul', 'Lisa', 'Kumar');

@copy = @names;
$size = @names; print "Given names are : @copy\n"; print "Number of names are : $size\n";

Dies führt zu folgendem Ergebnis:

Given names are : John Paul Lisa Kumar
Number of names are : 3

Hier ist @names ein Array, das in zwei verschiedenen Kontexten verwendet wurde. Zuerst haben wir es in ein anderes Array kopiert, dh in eine Liste, sodass alle Elemente zurückgegeben wurden, vorausgesetzt, der Kontext ist Listenkontext. Als nächstes haben wir dasselbe Array verwendet und versucht, dieses Array in einem Skalar zu speichern. In diesem Fall wurde nur die Anzahl der Elemente in diesem Array zurückgegeben, vorausgesetzt, der Kontext ist ein skalarer Kontext. Die folgende Tabelle listet die verschiedenen Kontexte auf -

Sr.Nr. Kontext & Beschreibung
1

Scalar

Die Zuordnung zu einer skalaren Variablen wertet die rechte Seite in einem skalaren Kontext aus.

2

List

Die Zuweisung zu einem Array oder einem Hash wertet die rechte Seite in einem Listenkontext aus.

3

Boolean

Boolescher Kontext ist einfach jeder Ort, an dem ein Ausdruck ausgewertet wird, um festzustellen, ob er wahr oder falsch ist.

4

Void

Diesem Kontext ist es nicht nur egal, wie hoch der Rückgabewert ist, er möchte auch nicht einmal einen Rückgabewert.

5

Interpolative

Dieser Kontext tritt nur in Anführungszeichen oder in Anführungszeichen auf.

Ein Skalar ist eine einzelne Dateneinheit. Diese Daten können eine Ganzzahl, ein Gleitkomma, ein Zeichen, eine Zeichenfolge, ein Absatz oder eine gesamte Webseite sein.

Hier ist ein einfaches Beispiel für die Verwendung skalarer Variablen:

#!/usr/bin/perl

$age = 25; # An integer assignment $name = "John Paul";   # A string 
$salary = 1445.50; # A floating point print "Age = $age\n";
print "Name = $name\n"; print "Salary = $salary\n";

Dies führt zu folgendem Ergebnis:

Age = 25
Name = John Paul
Salary = 1445.5

Numerische Skalare

Ein Skalar ist meistens entweder eine Zahl oder eine Zeichenfolge. Das folgende Beispiel zeigt die Verwendung verschiedener Arten von numerischen Skalaren -

#!/usr/bin/perl

$integer = 200; $negative = -300;
$floating = 200.340; $bigfloat = -1.2E-23;

# 377 octal, same as 255 decimal
$octal = 0377; # FF hex, also 255 decimal $hexa = 0xff;

print "integer = $integer\n"; print "negative = $negative\n";
print "floating = $floating\n"; print "bigfloat = $bigfloat\n";
print "octal = $octal\n"; print "hexa = $hexa\n";

Dies führt zu folgendem Ergebnis:

integer = 200
negative = -300
floating = 200.34
bigfloat = -1.2e-23
octal = 255
hexa = 255

String-Skalare

Das folgende Beispiel zeigt die Verwendung verschiedener Arten von String-Skalaren. Beachten Sie den Unterschied zwischen Zeichenfolgen in einfachen Anführungszeichen und Zeichenfolgen in doppelten Anführungszeichen -

#!/usr/bin/perl

$var = "This is string scalar!"; $quote = 'I m inside single quote - $var'; $double = "This is inside single quote - $var"; $escape = "This example of escape -\tHello, World!";

print "var = $var\n"; print "quote = $quote\n";
print "double = $double\n"; print "escape = $escape\n";

Dies führt zu folgendem Ergebnis:

var = This is string scalar!
quote = I m inside single quote - $var
double = This is inside single quote - This is string scalar!
escape = This example of escape -       Hello, World

Skalare Operationen

Sie werden ein Detail der verschiedenen in Perl verfügbaren Operatoren in einem separaten Kapitel sehen, aber hier werden wir einige numerische Operationen und Zeichenfolgenoperationen auflisten.

#!/usr/bin/perl

$str = "hello" . "world";       # Concatenates strings.
$num = 5 + 10; # adds two numbers. $mul = 4 * 5;                   # multiplies two numbers.
$mix = $str . $num; # concatenates string and number. print "str = $str\n";
print "num = $num\n"; print "mix = $mix\n";

Dies führt zu folgendem Ergebnis:

str = helloworld
num = 15
mul = 20
mix = helloworld15

Mehrzeilige Saiten

Wenn Sie mehrzeilige Zeichenfolgen in Ihre Programme einfügen möchten, können Sie die folgenden einfachen einfachen Anführungszeichen verwenden:

#!/usr/bin/perl

$string = 'This is a multiline string'; print "$string\n";

Dies führt zu folgendem Ergebnis:

This is
a multiline
string

Sie können die Dokumentensyntax "hier" auch verwenden, um mehrzeilige Zeilen wie folgt zu speichern oder zu drucken.

#!/usr/bin/perl

print <<EOF;
This is
a multiline
string
EOF

Dies führt auch zum gleichen Ergebnis -

This is
a multiline
string

V-Saiten

Ein Literal der Form v1.20.300.4000 wird als Zeichenfolge analysiert, die aus Zeichen mit den angegebenen Ordnungszahlen besteht. Diese Form wird als V-Strings bezeichnet.

Ein V-String bietet eine alternative und besser lesbare Möglichkeit, Strings zu erstellen, anstatt die etwas weniger lesbare Interpolationsform "\ x {1} \ x {14} \ x {12c} \ x {fa0}" zu verwenden.

Sie sind jedes Literal, das mit av beginnt und auf das ein oder mehrere durch Punkte getrennte Elemente folgen. Zum Beispiel -

#!/usr/bin/perl

$smile = v9786; $foo    = v102.111.111;
$martin = v77.97.114.116.105.110; print "smile = $smile\n";
print "foo = $foo\n"; print "martin = $martin\n";

Dies führt auch zum gleichen Ergebnis -

smile = ☺
foo = foo
martin = Martin
Wide character in print at main.pl line 7.

Spezielle Literale

Bisher müssen Sie ein Gefühl für String-Skalare und deren Verkettung und Interpolation haben. Lassen Sie mich Ihnen drei spezielle Literale vorstellen: __FILE__, __LINE__ und __PACKAGE__ repräsentieren den aktuellen Dateinamen, die Zeilennummer und den Paketnamen an diesem Punkt in Ihrem Programm.

Sie dürfen nur als separate Token verwendet werden und werden nicht in Zeichenfolgen interpoliert. Überprüfen Sie das folgende Beispiel -

#!/usr/bin/perl

print "File name ". __FILE__ . "\n";
print "Line Number " . __LINE__ ."\n";
print "Package " . __PACKAGE__ ."\n";

# they can not be interpolated
print "__FILE__ __LINE__ __PACKAGE__\n";

Dies führt zu folgendem Ergebnis:

File name hello.pl
Line Number 4
Package main
__FILE__ __LINE__ __PACKAGE__

Ein Array ist eine Variable, die eine geordnete Liste von Skalarwerten speichert. Array-Variablen wird ein "at" (@) vorangestellt. Um auf ein einzelnes Element eines Arrays zu verweisen, verwenden Sie das Dollarzeichen ($) mit dem Variablennamen, gefolgt vom Index des Elements in eckigen Klammern.

Hier ist ein einfaches Beispiel für die Verwendung der Array-Variablen:

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";

Hier haben wir das Escape-Zeichen (\) vor dem $ -Zeichen verwendet, um es zu drucken. Andere Perl verstehen es als Variable und drucken seinen Wert. Bei der Ausführung wird das folgende Ergebnis erzielt:

$ages[0] = 25 $ages[1] = 30
$ages[2] = 40 $names[0] = John Paul
$names[1] = Lisa $names[2] = Kumar

In Perl werden List- und Array-Begriffe häufig so verwendet, als wären sie austauschbar. Aber die Liste sind die Daten und das Array ist die Variable.

Array-Erstellung

Array-Variablen wird das @ -Zeichen vorangestellt und entweder mit Klammern oder mit dem qw-Operator gefüllt. Zum Beispiel -

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

In der zweiten Zeile wird der Operator qw // verwendet, der eine Liste von Zeichenfolgen zurückgibt und die begrenzte Zeichenfolge durch Leerzeichen trennt. In diesem Beispiel führt dies zu einem Array mit vier Elementen. Das erste Element ist 'this' und das letzte (vierte) ist 'array'. Dies bedeutet, dass Sie verschiedene Zeilen wie folgt verwenden können:

@days = qw/Monday
Tuesday
...
Sunday/;

Sie können ein Array auch füllen, indem Sie jeden Wert wie folgt einzeln zuweisen:

$array[0] = 'Monday'; ... $array[6] = 'Sunday';

Zugriff auf Array-Elemente

Wenn Sie über ein Array auf einzelne Elemente zugreifen, müssen Sie der Variablen ein Dollarzeichen ($) voranstellen und dann den Elementindex in eckigen Klammern nach dem Namen der Variablen anhängen. Zum Beispiel -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

print "$days[0]\n";
print "$days[1]\n"; print "$days[2]\n";
print "$days[6]\n"; print "$days[-1]\n";
print "$days[-7]\n";

Dies führt zu folgendem Ergebnis:

Mon
Tue
Wed
Sun
Sun
Mon

Array-Indizes beginnen bei Null. Um auf das erste Element zuzugreifen, müssen Sie 0 als Indizes angeben. Sie können auch einen negativen Index angeben. In diesem Fall wählen Sie das Element am Ende und nicht am Anfang des Arrays aus. Dies bedeutet Folgendes:

print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon

Sequential Number Arrays

Perl bietet eine Verknüpfung für fortlaufende Zahlen und Buchstaben. Anstatt beispielsweise jedes Element beim Zählen bis 100 auszutippen, können wir Folgendes tun:

#!/usr/bin/perl

@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);

print "@var_10\n";   # Prints number from 1 to 10
print "@var_20\n";   # Prints number from 10 to 20
print "@var_abc\n";  # Prints number from a to z

Hier heißt Doppelpunkt (..) range operator. Dies führt zu folgendem Ergebnis:

1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z

Array-Größe

Die Größe eines Arrays kann mithilfe des skalaren Kontexts auf dem Array bestimmt werden. Der zurückgegebene Wert ist die Anzahl der Elemente im Array.

@array = (1,2,3);
print "Size: ",scalar @array,"\n";

Der zurückgegebene Wert ist immer die physische Größe des Arrays, nicht die Anzahl der gültigen Elemente. Sie können dies demonstrieren, und der Unterschied zwischen scalar @array und $ # array mithilfe dieses Fragments ist wie folgt:

#!/usr/bin/perl

@array = (1,2,3);
$array[50] = 4; $size = @array;
$max_index = $#array;

print "Size:  $size\n"; print "Max Index: $max_index\n";

Dies führt zu folgendem Ergebnis:

Size: 51
Max Index: 50

Das Array enthält nur vier Elemente, die Informationen enthalten. Das Array ist jedoch 51 Elemente lang und weist den höchsten Index von 50 auf.

Hinzufügen und Entfernen von Elementen im Array

Perl bietet eine Reihe nützlicher Funktionen zum Hinzufügen und Entfernen von Elementen in einem Array. Sie haben vielleicht eine Frage, was eine Funktion ist? Bisher hast du benutztprintFunktion zum Drucken verschiedener Werte. In ähnlicher Weise gibt es verschiedene andere Funktionen oder manchmal auch Unterroutinen genannt, die für verschiedene andere Funktionen verwendet werden können.

Sr.Nr. Typen & Beschreibung
1

push @ARRAY, LIST

Schiebt die Werte der Liste an das Ende des Arrays.

2

pop @ARRAY

Springt ab und gibt den letzten Wert des Arrays zurück.

3

shift @ARRAY

Verschiebt den ersten Wert des Arrays und gibt ihn zurück, verkürzt das Array um 1 und verschiebt alles nach unten.

4

unshift @ARRAY, LIST

Stellt die Liste vor das Array und gibt die Anzahl der Elemente im neuen Array zurück.

#!/usr/bin/perl

# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins  = @coins\n";

# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins  = @coins\n";

# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins  = @coins\n";

# remove one element from the last of the array.
pop(@coins);
print "4. \@coins  = @coins\n";

# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins  = @coins\n";

Dies führt zu folgendem Ergebnis:

1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel

Array-Elemente schneiden

Sie können auch ein "Slice" aus einem Array extrahieren, dh Sie können mehr als ein Element aus einem Array auswählen, um ein anderes Array zu erstellen.

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3,4,5];

print "@weekdays\n";

Dies führt zu folgendem Ergebnis:

Thu Fri Sat

Die Spezifikation für ein Slice muss eine Liste gültiger Indizes enthalten, entweder positiv oder negativ, die jeweils durch ein Komma getrennt sind. Für die Geschwindigkeit können Sie auch die verwenden.. Bereichsoperator -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3..5];

print "@weekdays\n";

Dies führt zu folgendem Ergebnis:

Thu Fri Sat

Array-Elemente ersetzen

Jetzt werden wir eine weitere Funktion namens aufführen splice(), die die folgende Syntax hat -

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

Diese Funktion entfernt die durch OFFSET und LENGTH angegebenen Elemente von @ARRAY und ersetzt sie gegebenenfalls durch LIST. Schließlich werden die aus dem Array entfernten Elemente zurückgegeben. Es folgt das Beispiel -

#!/usr/bin/perl

@nums = (1..20);
print "Before - @nums\n";

splice(@nums, 5, 5, 21..25); 
print "After - @nums\n";

Dies führt zu folgendem Ergebnis:

Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

Hier beginnt der eigentliche Austausch mit der 6. Nummer, danach werden fünf Elemente von 6 auf 10 durch die Nummern 21, 22, 23, 24 und 25 ersetzt.

Strings in Arrays umwandeln

Schauen wir uns eine weitere Funktion an, die aufgerufen wird split(), die die folgende Syntax hat -

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

Diese Funktion teilt eine Zeichenfolge in ein Array von Zeichenfolgen auf und gibt sie zurück. Wenn LIMIT angegeben ist, wird höchstens diese Anzahl von Feldern aufgeteilt. Wenn PATTERN weggelassen wird, wird das Leerzeichen aufgeteilt. Es folgt das Beispiel -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

print "$string[3]\n"; # This will print Roses print "$names[4]\n";   # This will print Michael

Dies führt zu folgendem Ergebnis:

Roses
Michael

Arrays in Strings umwandeln

Wir können die verwenden join()Funktion, um die Array-Elemente wieder zu verbinden und eine lange skalare Zeichenfolge zu bilden. Diese Funktion hat die folgende Syntax:

join EXPR, LIST

Diese Funktion verbindet die separaten Zeichenfolgen von LIST zu einer einzelnen Zeichenfolge mit Feldern, die durch den Wert von EXPR getrennt sind, und gibt die Zeichenfolge zurück. Es folgt das Beispiel -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

$string1 = join( '-', @string ); $string2 = join( ',', @names );

print "$string1\n"; print "$string2\n";

Dies führt zu folgendem Ergebnis:

Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom

Arrays sortieren

Das sort()Die Funktion sortiert jedes Element eines Arrays gemäß den numerischen ASCII-Standards. Diese Funktion hat die folgende Syntax:

sort [ SUBROUTINE ] LIST

Diese Funktion sortiert die LISTE und gibt den sortierten Array-Wert zurück. Wenn SUBROUTINE angegeben ist, wird beim Sortieren der Elemente die angegebene Logik innerhalb der SUBTROUTINE angewendet.

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";

# sort this array
@foods = sort(@foods);
print "After: @foods\n";

Dies führt zu folgendem Ergebnis:

Before: pizza steak chicken burgers
After: burgers chicken pizza steak

Bitte beachten Sie, dass die Sortierung basierend auf dem numerischen ASCII-Wert der Wörter durchgeführt wird. Die beste Option ist also, zuerst jedes Element des Arrays in Kleinbuchstaben umzuwandeln und dann die Sortierfunktion auszuführen.

Arrays zusammenführen

Da ein Array nur eine durch Kommas getrennte Folge von Werten ist, können Sie sie wie unten gezeigt miteinander kombinieren.

#!/usr/bin/perl

@numbers = (1,3,(4,5,6));

print "numbers = @numbers\n";

Dies führt zu folgendem Ergebnis:

numbers = 1 3 4 5 6

Die eingebetteten Arrays werden einfach Teil des Hauptarrays, wie unten gezeigt -

#!/usr/bin/perl

@odd = (1,3,5);
@even = (2, 4, 6);

@numbers = (@odd, @even);

print "numbers = @numbers\n";

Dies führt zu folgendem Ergebnis:

numbers = 1 3 5 2 4 6

Elemente aus Listen auswählen

Die Listennotation ist identisch mit der für Arrays. Sie können ein Element aus einem Array extrahieren, indem Sie eckige Klammern an die Liste anhängen und einen oder mehrere Indizes angeben.

#!/usr/bin/perl

$var = (5,4,3,2,1)[4]; print "value of var = $var\n"

Dies führt zu folgendem Ergebnis:

value of var = 1

Ebenso können wir Slices extrahieren, ohne dass ein führendes @ -Zeichen erforderlich ist -

#!/usr/bin/perl

@list = (5,4,3,2,1)[1..3];

print "Value of list = @list\n";

Dies führt zu folgendem Ergebnis:

Value of list = 4 3 2

Ein Hash ist eine Menge von key/valuePaare. Vor Hash-Variablen steht ein Prozentzeichen (%). Um auf ein einzelnes Element eines Hash zu verweisen, verwenden Sie den Namen der Hash-Variablen, dem ein "$" -Zeichen vorangestellt ist, gefolgt von dem "Schlüssel", der dem Wert in geschweiften Klammern zugeordnet ist.

Hier ist ein einfaches Beispiel für die Verwendung der Hash-Variablen:

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Dies führt zu folgendem Ergebnis:

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Hashes erstellen

Hashes werden auf eine der beiden folgenden Arten erstellt. Bei der ersten Methode weisen Sie einem benannten Schlüssel einzeln einen Wert zu -

$data{'John Paul'} = 45; $data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Im zweiten Fall verwenden Sie eine Liste, die konvertiert wird, indem einzelne Paare aus der Liste entnommen werden: Das erste Element des Paares wird als Schlüssel und das zweite als Wert verwendet. Zum Beispiel -

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Aus Gründen der Übersichtlichkeit können Sie => als Alias ​​für verwenden, um die Schlüssel / Wert-Paare wie folgt anzugeben:

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Hier ist eine weitere Variante des obigen Formulars. Sehen Sie es sich an. Hier wurde allen Schlüsseln ein Bindestrich (-) vorangestellt, und um sie herum ist kein Zitat erforderlich.

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Es ist jedoch wichtig zu beachten, dass es ein einziges Wort gibt, dh ohne Leerzeichen wurden Schlüssel in dieser Form der Hash-Bildung verwendet. Wenn Sie Ihren Hash auf diese Weise aufbauen, wird auf Schlüssel nur mit Bindestrich zugegriffen, wie unten gezeigt.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Zugriff auf Hash-Elemente

Wenn Sie über einen Hash auf einzelne Elemente zugreifen, müssen Sie der Variablen ein Dollarzeichen ($) voranstellen und dann den Elementschlüssel in geschweiften Klammern nach dem Namen der Variablen anhängen. Zum Beispiel -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n"; print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Dies führt zu folgendem Ergebnis:

45
30
40

Scheiben extrahieren

Sie können Slices eines Hash genauso extrahieren wie Slices aus einem Array. Sie müssen das Präfix @ für die Variable verwenden, um den zurückgegebenen Wert zu speichern, da es sich um eine Liste von Werten handelt.

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Dies führt zu folgendem Ergebnis:

Array : 45 30

Schlüssel und Werte extrahieren

Mit können Sie eine Liste aller Schlüssel aus einem Hash abrufen keys Funktion, die die folgende Syntax hat -

keys %HASH

Diese Funktion gibt ein Array aller Schlüssel des genannten Hash zurück. Es folgt das Beispiel -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n"; print "$names[2]\n";

Dies führt zu folgendem Ergebnis:

Lisa
John Paul
Kumar

Ebenso können Sie verwenden valuesFunktion, um eine Liste aller Werte zu erhalten. Diese Funktion hat die folgende Syntax:

values %HASH

Diese Funktion gibt ein normales Array zurück, das aus allen Werten des benannten Hash besteht. Es folgt das Beispiel -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n"; print "$ages[1]\n";
print "$ages[2]\n";

Dies führt zu folgendem Ergebnis:

30
45
40

Auf Existenz prüfen

Wenn Sie versuchen, über einen nicht vorhandenen Hash auf ein Schlüssel / Wert-Paar zuzugreifen, erhalten Sie normalerweise das undefinedWenn Sie Warnungen aktiviert haben, wird zur Laufzeit eine Warnung generiert. Sie können dies umgehen, indem Sie dieexists Funktion, die true zurückgibt, wenn der benannte Schlüssel vorhanden ist, unabhängig davon, welchen Wert er haben könnte -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Hier haben wir die IF ... ELSE-Anweisung eingeführt, die wir in einem separaten Kapitel untersuchen werden. Im Moment nehmen Sie das einfach anif( condition ) Teil wird nur ausgeführt, wenn die gegebene Bedingung andernfalls wahr ist elseTeil wird ausgeführt. Wenn wir also das obige Programm ausführen, wird das folgende Ergebnis erzeugt, da hier die gegebene Bedingung vorliegt ($ data {'Lisa'} gibt true zurück -

Lisa is 30 years old

Hash-Größe abrufen

Sie können die Größe ermitteln, dh die Anzahl der Elemente aus einem Hash, indem Sie den skalaren Kontext für Schlüssel oder Werte verwenden. Sagen Sie einfach zuerst, dass Sie ein Array mit den Schlüsseln oder Werten erhalten müssen, und dann können Sie die Größe des Arrays wie folgt ermitteln:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

@values = values %data;
$size = @values; print "2 - Hash size: is $size\n";

Dies führt zu folgendem Ergebnis:

1 - Hash size: is 3
2 - Hash size: is 3

Hinzufügen und Entfernen von Elementen in Hashes

Das Hinzufügen eines neuen Schlüssel / Wert-Paares kann mit einer Codezeile unter Verwendung eines einfachen Zuweisungsoperators erfolgen. Um ein Element aus dem Hash zu entfernen, müssen Sie es verwendendelete Funktion wie unten im Beispiel gezeigt -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55; @keys = keys %data; $size = @keys;
print "2 - Hash size:  is $size\n"; # delete the same element from the hash; delete $data{'Ali'};
@keys = keys %data;
$size = @keys; print "3 - Hash size: is $size\n";

Dies führt zu folgendem Ergebnis:

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3

Perl-Bedingungsanweisungen helfen bei der Entscheidungsfindung, bei der der Programmierer eine oder mehrere Bedingungen angeben muss, die vom Programm bewertet oder getestet werden sollen, sowie eine Anweisung oder Anweisungen, die ausgeführt werden sollen, wenn die Bedingung als wahr und optional als andere bestimmt wird Anweisungen, die ausgeführt werden sollen, wenn festgestellt wird, dass die Bedingung falsch ist.

Es folgt das Allgemeine einer typischen Entscheidungsstruktur, die in den meisten Programmiersprachen zu finden ist:

Die Nummer 0, die Zeichenfolgen '0' und "", die leere Liste () und undef sind alle false in einem booleschen Kontext und alle anderen Werte sind true. Negation eines wahren Wertes durch! oder not gibt einen speziellen falschen Wert zurück.

Die Programmiersprache Perl bietet die folgenden Arten von bedingten Anweisungen.

Sr.Nr. Aussage & Beschreibung
1 if-Anweisung

Ein if statement besteht aus einem booleschen Ausdruck, gefolgt von einer oder mehreren Anweisungen.

2 if ... else-Anweisung

Ein if statement kann von einem optionalen gefolgt werden else statement.

3 if ... elsif ... else-Anweisung

Ein if statement kann von einem optionalen gefolgt werden elsif statement und dann durch eine optionale else statement.

4 es sei denn, Aussage

Ein unless statement besteht aus einem booleschen Ausdruck, gefolgt von einer oder mehreren Anweisungen.

5 es sei denn ... sonst Aussage

Ein unless statement kann von einem optionalen gefolgt werden else statement.

6 es sei denn ... elsif..else Aussage

Ein unless statement kann von einem optionalen gefolgt werden elsif statement und dann durch eine optionale else statement.

7 switch-Anweisung

Mit den neuesten Versionen von Perl können Sie die switchErklärung. Dies ermöglicht eine einfache Möglichkeit, einen variablen Wert mit verschiedenen Bedingungen zu vergleichen.

Das ? : Operator

Lassen Sie uns das überprüfen conditional operator ? :die verwendet werden kann, um zu ersetzen if...elseAussagen. Es hat die folgende allgemeine Form -

Exp1 ? Exp2 : Exp3;

Wobei Exp1, Exp2 und Exp3 Ausdrücke sind. Beachten Sie die Verwendung und Platzierung des Doppelpunkts.

Der Wert eines? Der Ausdruck wird wie folgt bestimmt: Exp1 wird ausgewertet. Wenn es wahr ist, wird Exp2 ausgewertet und wird zum Wert des gesamten? Ausdruck. Wenn Exp1 falsch ist, wird Exp3 ausgewertet und sein Wert wird zum Wert des Ausdrucks. Unten finden Sie ein einfaches Beispiel für die Verwendung dieses Operators:

#!/usr/local/bin/perl
 
$name = "Ali"; $age = 10;

$status = ($age > 60 )? "A senior citizen" : "Not a senior citizen";

print "$name is - $status\n";

Dies führt zu folgendem Ergebnis:

Ali is - Not a senior citizen

Es kann vorkommen, dass Sie einen Codeblock mehrmals ausführen müssen. Im Allgemeinen werden Anweisungen nacheinander ausgeführt: Die erste Anweisung in einer Funktion wird zuerst ausgeführt, gefolgt von der zweiten usw.

Programmiersprachen bieten verschiedene Steuerungsstrukturen, die kompliziertere Ausführungspfade ermöglichen.

Mit einer Schleifenanweisung können wir eine Anweisung oder eine Gruppe von Anweisungen mehrmals ausführen. Im Folgenden wird die allgemeine Form einer Schleifenanweisung in den meisten Programmiersprachen beschrieben:

Die Programmiersprache Perl bietet die folgenden Schleifentypen, um die Schleifenanforderungen zu erfüllen.

Sr.Nr. Schleifentyp & Beschreibung
1 while-Schleife

Wiederholt eine Anweisung oder eine Gruppe von Anweisungen, während eine bestimmte Bedingung erfüllt ist. Es testet die Bedingung, bevor der Schleifenkörper ausgeführt wird.

2 bis Schleife

Wiederholt eine Anweisung oder eine Gruppe von Anweisungen, bis eine bestimmte Bedingung erfüllt ist. Es testet die Bedingung, bevor der Schleifenkörper ausgeführt wird.

3 für Schleife

Führt eine Folge von Anweisungen mehrmals aus und verkürzt den Code, der die Schleifenvariable verwaltet.

4 foreach Schleife

Die foreach-Schleife durchläuft einen normalen Listenwert und setzt die Variable VAR nacheinander auf jedes Element der Liste.

5 do ... while-Schleife

Wie eine while-Anweisung, nur dass sie die Bedingung am Ende des Schleifenkörpers testet

6 verschachtelte Schleifen

Sie können eine oder mehrere Schleifen in einer anderen while-, for- oder do..while-Schleife verwenden.

Schleifensteuerungsanweisungen

Schleifensteueranweisungen ändern die Ausführung von ihrer normalen Reihenfolge. Wenn die Ausführung einen Bereich verlässt, werden alle automatischen Objekte, die in diesem Bereich erstellt wurden, zerstört.

Perl unterstützt die folgenden Steueranweisungen. Klicken Sie auf die folgenden Links, um deren Details zu überprüfen.

Sr.Nr. Steueranweisung & Beschreibung
1 nächste Aussage

Bewirkt, dass die Schleife den Rest ihres Körpers überspringt und ihren Zustand sofort erneut testet, bevor sie wiederholt wird.

2 letzte Aussage

Beendet die Schleifenanweisung und überträgt die Ausführung an die Anweisung unmittelbar nach der Schleife.

3 Aussage fortsetzen

Ein fortgesetzter BLOCK wird immer ausgeführt, kurz bevor die Bedingung erneut ausgewertet werden soll.

4 Anweisung wiederholen

Der Befehl redo startet den Schleifenblock neu, ohne die Bedingung erneut auszuwerten. Der Fortsetzungsblock, falls vorhanden, wird nicht ausgeführt.

5 gehe zu Aussage

Perl unterstützt einen goto-Befehl mit drei Formen: goto label, goto expr und goto & name.

Die Endlosschleife

Eine Schleife wird zur Endlosschleife, wenn eine Bedingung niemals falsch wird. DasforZu diesem Zweck wird traditionell eine Schleife verwendet. Da keiner der drei Ausdrücke, die diefor Wenn eine Schleife erforderlich ist, können Sie eine Endlosschleife erstellen, indem Sie den bedingten Ausdruck leer lassen.

#!/usr/local/bin/perl
 
for( ; ; ) {
   printf "This loop will run forever.\n";
}

Sie können die obige Endlosschleife beenden, indem Sie die Tasten Strg + C drücken.

Wenn der bedingte Ausdruck fehlt, wird angenommen, dass er wahr ist. Möglicherweise haben Sie einen Initialisierungs- und Inkrementausdruck, aber als Programmierer verwenden Sie häufiger das Konstrukt for (;;), um eine Endlosschleife zu kennzeichnen.

Was ist ein Operator?

Eine einfache Antwort kann gegeben werden, indem der Ausdruck 4 + 5 gleich 9 ist . Hier heißen 4 und 5 Operanden und + Operator. Die Perl-Sprache unterstützt viele Operatortypen. Im Folgenden finden Sie eine Liste wichtiger und am häufigsten verwendeter Operatoren.

  • Rechenzeichen
  • Gleichstellungsoperatoren
  • Logische Operatoren
  • Zuweisungsoperatoren
  • Bitweise Operatoren
  • Logische Operatoren
  • Zitatähnliche Operatoren
  • Verschiedene Betreiber

Schauen wir uns alle Operatoren einzeln an.

Perl-Arithmetikoperatoren

Variable annehmen $a holds 10 and variable $b hält 20, dann folgen die Perl-Rechenoperatoren -

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

+ ( Addition )

Fügt Werte auf beiden Seiten des Operators hinzu

Example - - $a + $b wird 30 geben

2

- (Subtraction)

Subtrahiert den rechten Operanden vom linken Operanden

Example - - $a - $b ergibt -10

3

* (Multiplication)

Multipliziert Werte auf beiden Seiten des Operators

Example - - $a * $b ergibt 200

4

/ (Division)

Teilt den linken Operanden durch den rechten Operanden

Example - - $b / $a wird 2 geben

5

% (Modulus)

Teilt den linken Operanden durch den rechten Operanden und gibt den Rest zurück

Example - - $b % $a ergibt 0

6

** (Exponent)

Führt eine Exponentialberechnung (Leistungsberechnung) für Operatoren durch

Example - - $a**$b gibt 10 zur Potenz 20

Perl-Gleichheitsoperatoren

Diese werden auch als Vergleichsoperatoren bezeichnet. Variable annehmen$a holds 10 and variable $Wenn b 20 hält, überprüfen wir die folgenden numerischen Gleichheitsoperatoren:

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

== (equal to)

Überprüft, ob der Wert von zwei Operanden gleich ist oder nicht. Wenn ja, wird die Bedingung wahr.

Example - (($a == $b) ist nicht wahr.

2

!= (not equal to)

Überprüft, ob der Wert von zwei Operanden gleich ist oder nicht. Wenn die Werte nicht gleich sind, wird die Bedingung wahr.

Example - (($a != $b) ist wahr.

3

<=>

Überprüft, ob der Wert von zwei Operanden gleich ist oder nicht, und gibt -1, 0 oder 1 zurück, je nachdem, ob das linke Argument numerisch kleiner, gleich oder größer als das rechte Argument ist.

Example - (($a <=> $b) gibt -1 zurück.

4

> (greater than)

Überprüft, ob der Wert des linken Operanden größer als der Wert des rechten Operanden ist. Wenn ja, wird die Bedingung wahr.

Example - (($a > $b) ist nicht wahr.

5

< (less than)

Überprüft, ob der Wert des linken Operanden kleiner als der Wert des rechten Operanden ist. Wenn ja, wird die Bedingung wahr.

Example - (($a < $b) ist wahr.

6

>= (greater than or equal to)

Überprüft, ob der Wert des linken Operanden größer oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung wahr.

Example - (($a >= $b) ist nicht wahr.

7

<= (less than or equal to)

Überprüft, ob der Wert des linken Operanden kleiner oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung wahr.

Example - (($a <= $b) ist wahr.

Nachfolgend finden Sie eine Liste der Aktienbetreiber. Variable annehmen$a holds "abc" and variable $Wenn b "xyz" enthält, können Sie die folgenden Zeichenfolgengleichheitsoperatoren überprüfen:

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

lt

Gibt true zurück, wenn das linke Argument stringweise kleiner als das rechte Argument ist.

Example - (($a lt $b) ist wahr.

2

gt

Gibt true zurück, wenn das linke Argument stringweise größer als das rechte Argument ist.

Example - (($a gt $b) ist falsch.

3

le

Gibt true zurück, wenn das linke Argument in der Zeichenfolge kleiner oder gleich dem rechten Argument ist.

Example - (($a le $b) ist wahr.

4

ge

Gibt true zurück, wenn das linke Argument in der Zeichenfolge größer oder gleich dem rechten Argument ist.

Example - (($a ge $b) ist falsch.

5

eq

Gibt true zurück, wenn das linke Argument dem rechten Argument entspricht.

Example - (($a eq $b) ist falsch.

6

ne

Gibt true zurück, wenn das linke Argument stringwise nicht dem rechten Argument entspricht.

Example - (($a ne $b) ist wahr.

7

cmp

Gibt -1, 0 oder 1 zurück, je nachdem, ob das linke Argument kleiner als, gleich oder größer als das rechte Argument ist.

Example - (($a cmp $b) ist -1.

Perl-Zuweisungsoperatoren

Variable annehmen $a holds 10 and variable $b hält 20, dann sind unten die in Perl verfügbaren Zuweisungsoperatoren und ihre Verwendung -

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

=

Einfacher Zuweisungsoperator, Weist Werte von Operanden auf der rechten Seite dem Operanden auf der linken Seite zu

Example - - $c = $a + $b will assigned value of $a + $b into $c

2

+=

UND-Zuweisungsoperator hinzufügen. Er fügt dem linken Operanden den rechten Operanden hinzu und weist das Ergebnis dem linken Operanden zu

Example - - $c += $a ist äquivalent zu $c = $c + $ a

3

-=

Subtrahieren UND Zuweisungsoperator, subtrahiert den rechten Operanden vom linken Operanden und weist das Ergebnis dem linken Operanden zu

Example - $ c - = $a is equivalent to $c = $c - $ein

4

*=

Multiplizieren Sie den UND-Zuweisungsoperator. Er multipliziert den rechten Operanden mit dem linken Operanden und weist das Ergebnis dem linken Operanden zu

Example - - $c *= $a ist äquivalent zu $c = $c * $ a

5

/=

UND-Zuweisungsoperator teilen. Er teilt den linken Operanden mit dem rechten Operanden und weist das Ergebnis dem linken Operanden zu

Example - $ c / = $a is equivalent to $c = $c / $ein

6

%=

Modul- UND Zuweisungsoperator. Der Modul wird mit zwei Operanden verwendet und das Ergebnis dem linken Operanden zugewiesen

Example - - $c %= $a ist äquivalent zu $c = $c% a

7

**=

Exponent UND Zuweisungsoperator, Führt eine Exponentialberechnung (Potenzberechnung) für Operatoren durch und weist dem linken Operanden einen Wert zu

Example - - $c **= $a ist äquivalent zu $c = $c ** $ a

Perl Bitwise Operatoren

Der bitweise Operator bearbeitet Bits und führt eine bitweise Operation durch. Angenommen, $ a = 60; und $ b = 13; Jetzt im Binärformat werden sie wie folgt sein:

$ a = 0011 1100

$ b = 0000 1101

-----------------

$ a & $ b = 0000 1100

$ a | $ b = 0011 1101

$ a ^ $ b = 0011 0001

~ $ a = 1100 0011

Es gibt folgende bitweise Operatoren, die von der Perl-Sprache unterstützt werden. Nehmen Sie an, wenn $a = 60; and $b = 13

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

&

Der binäre UND-Operator kopiert ein Bit in das Ergebnis, wenn es in beiden Operanden vorhanden ist.

Example - (($a & $b) ergibt 12, was 0000 1100 ist

2

|

Der binäre ODER-Operator kopiert ein Bit, wenn es in einem anderen Operanden vorhanden ist.

Example - (($a | $b) ergibt 61, was 0011 1101 ist

3

^

Der binäre XOR-Operator kopiert das Bit, wenn es in einem Operanden gesetzt ist, aber nicht in beiden.

Example - (($a ^ $b) ergibt 49, was 0011 0001 ist

4

~

Der Komplementoperator für binäre Einsen ist unär und hat den Effekt, dass Bits umgedreht werden.

Example - (~ $ a) ergibt -61, was aufgrund einer vorzeichenbehafteten Binärzahl 1100 0011 in 2er-Komplementform ist.

5

<<

Binärer Linksschaltoperator. Der Wert der linken Operanden wird um die Anzahl der vom rechten Operanden angegebenen Bits nach links verschoben.

Example - $ a << 2 ergibt 240, was 1111 0000 ist

6

>>

Binärer Rechtsschieber. Der Wert der linken Operanden wird um die Anzahl der vom rechten Operanden angegebenen Bits nach rechts verschoben.

Example - $ a >> 2 ergibt 15, was 0000 1111 ist

Perl Logical Operators

Es gibt folgende logische Operatoren, die von der Perl-Sprache unterstützt werden. Angenommen, die Variable $ a ist wahr und die Variable $ b ist falsch, dann -

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

and

Wird als logischer UND-Operator bezeichnet. Wenn beide Operanden wahr sind, wird die Bedingung wahr.

Example - ($ a und $ b) ist falsch.

2

&&

Der logische UND-Operator im C-Stil kopiert ein Bit in das Ergebnis, wenn es in beiden Operanden vorhanden ist.

Example - ($ a && $ b) ist falsch.

3

or

Wird als logischer ODER-Operator bezeichnet. Wenn einer der beiden Operanden nicht Null ist, wird die Bedingung wahr.

Example - ($ a oder $ b) ist wahr.

4

||

Der logische ODER-Operator im C-Stil kopiert ein Bit, wenn es in einem anderen Operanden vorhanden ist.

Example - ($ a || $ b) ist wahr.

5

not

Wird als logischer NICHT-Operator bezeichnet. Verwenden Sie diese Option, um den logischen Status des Operanden umzukehren. Wenn eine Bedingung wahr ist, macht der Operator Logical NOT false.

Example - nicht ($ a und $ b) ist wahr.

Zitatähnliche Operatoren

Es gibt folgende Anführungszeichen-ähnliche Operatoren, die von der Perl-Sprache unterstützt werden. In der folgenden Tabelle steht ein {} für ein beliebiges Trennzeichenpaar, das Sie auswählen.

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

q{ }

Schließt eine Zeichenfolge mit einfachen Anführungszeichen ein

Example - q {abcd} gibt 'abcd'

2

qq{ }

Schließt eine Zeichenfolge mit doppelten Anführungszeichen ein

Example - qq {abcd} gibt "abcd"

3

qx{ }

Schließt eine Zeichenfolge mit invertierten Anführungszeichen ein

Example - qx {abcd} gibt `abcd` an

Verschiedene Betreiber

Es gibt verschiedene Operatoren, die von der Perl-Sprache unterstützt werden. Angenommen, Variable a hält 10 und Variable b hält 20, dann -

Beispiel zeigen

Sr.Nr. Betreiber & Beschreibung
1

.

Der binäre Operator dot (.) Verkettet zwei Zeichenfolgen.

Example - Wenn $ a = "abc", $b = "def" then $a. $ b gibt "abcdef"

2

x

Der Wiederholungsoperator x gibt eine Zeichenfolge zurück, die aus dem linken Operanden besteht, der so oft wiederholt wird, wie vom rechten Operanden angegeben.

Example - ('-' x 3) gibt ---.

3

..

Der Bereichsoperator .. gibt eine Liste von Werten zurück, die (um eins) vom linken zum rechten Wert zählen

Example - (2..5) ergibt (2, 3, 4, 5)

4

++

Der Operator Auto Increment erhöht den ganzzahligen Wert um eins

Example - $ a ++ ergibt 11

5

--

Der Operator "Automatische Dekrementierung" verringert den ganzzahligen Wert um eins

Example - $ a-- gibt 9

6

->

Der Pfeiloperator wird hauptsächlich zum Dereferenzieren einer Methode oder Variablen von einem Objekt oder einem Klassennamen verwendet

Example - $ obj->$a is an example to access variable $a from object $obj.

Perl Operators Precedence

The following table lists all operators from highest precedence to lowest.

Show Example

left	terms and list operators (leftward)
left	->
nonassoc	++ --
right	**
right	! ~ \ and unary + and -
left	=~ !~
left	* / % x
left	+ - .
left	<< >>
nonassoc	named unary operators
nonassoc	< > <= >= lt gt le ge
nonassoc	== != <=> eq ne cmp ~~
left	&
left	| ^
left	&&
left	|| //
nonassoc	..  ...
right	?:
right	= += -= *= etc.
left	, =>
nonassoc	list operators (rightward)
right	not
left	and
left	or xor

This chapter will give you the basic understanding on how to process and manipulate dates and times in Perl.

Current Date and Time

Let's start with localtime() function, which returns values for the current date and time if given no arguments. Following is the 9-element list returned by the localtime function while using in list context −

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Try the following example to print different elements returned by localtime() function −

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

When the above code is executed, it produces the following result −

16 Feb Sat

If you will use localtime() function in scalar context, then it will return date and time from the current time zone set in the system. Try the following example to print current date and time in full format −

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

When the above code is executed, it produces the following result −

Local date and time Sat Feb 16 06:50:45 2013

GMT Time

The function gmtime() works just like localtime() function but the returned values are localized for the standard Greenwich time zone. When called in list context, $isdst, the last value returned by gmtime, is always 0. There is no Daylight Saving Time in GMT.

You should make a note on the fact that localtime() will return the current local time on the machine that runs the script and gmtime() will return the universal Greenwich Mean Time, or GMT (or UTC).

Try the following example to print the current date and time but on GMT scale −

#!/usr/local/bin/perl

$datestring = gmtime(); print "GMT date and time $datestring\n";

When the above code is executed, it produces the following result −

GMT date and time Sat Feb 16 13:50:45 2013

Format Date and Time

You can use localtime() function to get a list of 9-elements and later you can use the printf() function to format date and time based on your requirements as follows −

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("Time Format - HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);

When the above code is executed, it produces the following result −

Time Format - HH:MM:SS
06:58:52

Epoch time

You can use the time() function to get epoch time, i.e., the numbers of seconds that have elapsed since a given date, in Unix is January 1, 1970.

#!/usr/local/bin/perl
 
$epoc = time(); print "Number of seconds since Jan 1, 1970 - $epoc\n";

When the above code is executed, it produces the following result −

Number of seconds since Jan 1, 1970 - 1361022130

You can convert a given number of seconds into date and time string as follows −

#!/usr/local/bin/perl

$datestring = localtime(); print "Current date and time $datestring\n";

$epoc = time(); $epoc = $epoc - 24 * 60 * 60; # one day before of current date. $datestring = localtime($epoc); print "Yesterday's date and time $datestring\n";

When the above code is executed, it produces the following result −

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

POSIX Function strftime()

You can use the POSIX function strftime() to format date and time with the help of the following table. Please note that the specifiers marked with an asterisk (*) are locale-dependent.

Specifier Replaced by Example
%a Abbreviated weekday name * Thu
%A Full weekday name * Thursday
%b Abbreviated month name * Aug
%B Full month name * August
%c Date and time representation * Thu Aug 23 14:55:02 2001
%C Year divided by 100 and truncated to integer (00-99) 20
%d Day of the month, zero-padded (01-31) 23
%D Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
%e Day of the month, space-padded (1-31) 23
%F Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
%g Week-based year, last two digits (00-99) 01
%G Week-based year 2001
%h Abbreviated month name * (same as %b) Aug
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (01-12) 08
%M Minute (00-59) 55
%n New-line character ('\n')
%p AM or PM designation PM
%r 12-hour clock time * 02:55:02 pm
%R 24-hour HH:MM time, equivalent to %H:%M 14:55
%S Second (00-61) 02
%t Horizontal-tab character ('\t')
%T ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55
%u ISO 8601 weekday as number with Monday as 1 (1-7) 4
%U Week number with the first Sunday as the first day of week one (00-53) 33
%V ISO 8601 week number (00-53) 34
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation * 08/23/01
%X Time representation * 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%z

ISO 8601 offset from UTC in timezone (1 minute = 1, 1 hour = 100)

If timezone cannot be termined, no characters

+100
%Z

Timezone name or abbreviation *

If timezone cannot be termined, no characters

CDT
%% A % sign %

Let's check the following example to understand the usage −

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime; printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime; printf("date and time - $datestring\n");

When the above code is executed, it produces the following result −

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013

A Perl subroutine or function is a group of statements that together performs a task. You can divide up your code into separate subroutines. How you divide up your code among different subroutines is up to you, but logically the division usually is so each function performs a specific task.

Perl uses the terms subroutine, method and function interchangeably.

Define and Call a Subroutine

The general form of a subroutine definition in Perl programming language is as follows −

sub subroutine_name {
   body of the subroutine
}

The typical way of calling that Perl subroutine is as follows −

subroutine_name( list of arguments );

In versions of Perl before 5.0, the syntax for calling subroutines was slightly different as shown below. This still works in the newest versions of Perl, but it is not recommended since it bypasses the subroutine prototypes.

&subroutine_name( list of arguments );

Let's have a look into the following example, which defines a simple function and then call it. Because Perl compiles your program before executing it, it doesn't matter where you declare your subroutine.

#!/usr/bin/perl

# Function definition
sub Hello {
   print "Hello, World!\n";
}

# Function call
Hello();

When above program is executed, it produces the following result −

Hello, World!

Passing Arguments to a Subroutine

You can pass various arguments to a subroutine like you do in any other programming language and they can be acessed inside the function using the special array @_. Thus the first argument to the function is in $_[0], the second is in $_[1], and so on.

You can pass arrays and hashes as arguments like any scalar but passing more than one array or hash normally causes them to lose their separate identities. So we will use references ( explained in the next chapter ) to pass any array or hash.

Let's try the following example, which takes a list of numbers and then prints their average −

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_); $sum = 0;

   foreach $item (@_) { $sum += $item; } $average = $sum / $n;

   print "Average for the given numbers : $average\n";
}

# Function call
Average(10, 20, 30);

When above program is executed, it produces the following result −

Average for the given numbers : 20

Passing Lists to Subroutines

Because the @_ variable is an array, it can be used to supply lists to a subroutine. However, because of the way in which Perl accepts and parses lists and arrays, it can be difficult to extract the individual elements from @_. If you have to pass a list along with other scalar arguments, then make list as the last argument as shown below −

#!/usr/bin/perl

# Function definition
sub PrintList {
   my @list = @_;
   print "Given list is @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);

# Function call with list parameter
PrintList($a, @b);

When above program is executed, it produces the following result −

Given list is 10 1 2 3 4

Passing Hashes to Subroutines

When you supply a hash to a subroutine or operator that accepts a list, then hash is automatically translated into a list of key/value pairs. For example −

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;

   foreach my $key ( keys %hash ) {
      my $value = $hash{$key}; print "$key : $value\n";
   }
}
%hash = ('name' => 'Tom', 'age' => 19);

# Function call with hash parameter
PrintHash(%hash);

When above program is executed, it produces the following result −

name : Tom
age : 19

Returning Value from a Subroutine

You can return a value from subroutine like you do in any other programming language. If you are not returning a value from a subroutine then whatever calculation is last performed in a subroutine is automatically also the return value.

You can return arrays and hashes from the subroutine like any scalar but returning more than one array or hash normally causes them to lose their separate identities. So we will use references ( explained in the next chapter ) to return any array or hash from a function.

Let's try the following example, which takes a list of numbers and then returns their average −

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0; foreach $item (@_) {
      $sum += $item;
   }
   $average = $sum / $n; return $average;
}

# Function call
$num = Average(10, 20, 30); print "Average for the given numbers : $num\n";

When above program is executed, it produces the following result −

Average for the given numbers : 20

Private Variables in a Subroutine

By default, all variables in Perl are global variables, which means they can be accessed from anywhere in the program. But you can create private variables called lexical variables at any time with the my operator.

The my operator confines a variable to a particular region of code in which it can be used and accessed. Outside that region, this variable cannot be used or accessed. This region is called its scope. A lexical scope is usually a block of code with a set of braces around it, such as those defining the body of the subroutine or those marking the code blocks of if, while, for, foreach, and eval statements.

Following is an example showing you how to define a single or multiple private variables using my operator −

sub somefunc {
   my $variable; # $variable is invisible outside somefunc()
   my ($another, @an_array, %a_hash); # declaring many variables at once
}

Let's check the following example to distinguish between global and private variables −

#!/usr/bin/perl

# Global variable
$string = "Hello, World!";

# Function definition
sub PrintHello {
   # Private variable for PrintHello function
   my $string; $string = "Hello, Perl!";
   print "Inside the function $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

When above program is executed, it produces the following result −

Inside the function Hello, Perl!
Outside the function Hello, World!

Temporary Values via local()

The local is mostly used when the current value of a variable must be visible to called subroutines. A local just gives temporary values to global (meaning package) variables. This is known as dynamic scoping. Lexical scoping is done with my, which works more like C's auto declarations.

If more than one variable or expression is given to local, they must be placed in parentheses. This operator works by saving the current values of those variables in its argument list on a hidden stack and restoring them upon exiting the block, subroutine, or eval.

Let's check the following example to distinguish between global and local variables −

#!/usr/bin/perl

# Global variable
$string = "Hello, World!"; sub PrintHello { # Private variable for PrintHello function local $string;
   $string = "Hello, Perl!"; PrintMe(); print "Inside the function PrintHello $string\n";
}
sub PrintMe {
   print "Inside the function PrintMe $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

When above program is executed, it produces the following result −

Inside the function PrintMe Hello, Perl!
Inside the function PrintHello Hello, Perl!
Outside the function Hello, World!

State Variables via state()

There are another type of lexical variables, which are similar to private variables but they maintain their state and they do not get reinitialized upon multiple calls of the subroutines. These variables are defined using the state operator and available starting from Perl 5.9.4.

Let's check the following example to demonstrate the use of state variables −

#!/usr/bin/perl

use feature 'state';

sub PrintCount {
   state $count = 0; # initial value print "Value of counter is $count\n";
   $count++;
}

for (1..5) {
   PrintCount();
}

When above program is executed, it produces the following result −

Value of counter is 0
Value of counter is 1
Value of counter is 2
Value of counter is 3
Value of counter is 4

Prior to Perl 5.10, you would have to write it like this −

#!/usr/bin/perl

{
   my $count = 0; # initial value

   sub PrintCount {
      print "Value of counter is $count\n"; $count++;
   }
}

for (1..5) {
   PrintCount();
}

Subroutine Call Context

The context of a subroutine or statement is defined as the type of return value that is expected. This allows you to use a single function that returns different values based on what the user is expecting to receive. For example, the following localtime() returns a string when it is called in scalar context, but it returns a list when it is called in list context.

my $datestring = localtime( time );

In this example, the value of $timestr is now a string made up of the current date and time, for example, Thu Nov 30 15:21:33 2000. Conversely −

($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);

Now the individual variables contain the corresponding values returned by localtime() subroutine.

A Perl reference is a scalar data type that holds the location of another value which could be scalar, arrays, or hashes. Because of its scalar nature, a reference can be used anywhere, a scalar can be used.

You can construct lists containing references to other lists, which can contain references to hashes, and so on. This is how the nested data structures are built in Perl.

Create References

It is easy to create a reference for any variable, subroutine or value by prefixing it with a backslash as follows −

$scalarref = \$foo; $arrayref  = \@ARGV;
$hashref = \%ENV; $coderef   = \&handler;
$globref   = \*foo;

You cannot create a reference on an I/O handle (filehandle or dirhandle) using the backslash operator but a reference to an anonymous array can be created using the square brackets as follows −

$arrayref = [1, 2, ['a', 'b', 'c']];

Similar way you can create a reference to an anonymous hash using the curly brackets as follows −

$hashref = {
   'Adam'  => 'Eve',
   'Clyde' => 'Bonnie',
};

A reference to an anonymous subroutine can be created by using sub without a subname as follows −

$coderef = sub { print "Boink!\n" };

Dereferencing

Dereferencing returns the value from a reference point to the location. To dereference a reference simply use $, @ or % as prefix of the reference variable depending on whether the reference is pointing to a scalar, array, or hash. Following is the example to explain the concept −

#!/usr/bin/perl

$var = 10;

# Now $r has reference to $var scalar.
$r = \$var;

# Print value available at the location stored in $r. print "Value of $var is : ", $$r, "\n"; @var = (1, 2, 3); # Now $r has reference to @var array.
$r = \@var; # Print values available at the location stored in $r.
print "Value of @var is : ",  @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # Now $r has reference to %var hash.
$r = \%var; # Print values available at the location stored in $r.
print "Value of %var is : ", %$r, "\n";

When above program is executed, it produces the following result −

Value of 10 is : 10
Value of 1 2 3 is : 123
Value of %var is : key220key110

If you are not sure about a variable type, then its easy to know its type using ref, which returns one of the following strings if its argument is a reference. Otherwise, it returns false −

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Let's try the following example −

#!/usr/bin/perl

$var = 10;
$r = \$var;
print "Reference type in r : ", ref($r), "\n"; @var = (1, 2, 3); $r = \@var;
print "Reference type in r : ", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var;
print "Reference type in r : ", ref($r), "\n";

When above program is executed, it produces the following result −

Reference type in r : SCALAR
Reference type in r : ARRAY
Reference type in r : HASH

Circular References

A circular reference occurs when two references contain a reference to each other. You have to be careful while creating references otherwise a circular reference can lead to memory leaks. Following is an example −

#!/usr/bin/perl

 my $foo = 100;
 $foo = \$foo;
 
 print "Value of foo is : ", $$foo, "\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Value of foo is : REF(0x9aae38)

Verweise auf Funktionen

Dies kann vorkommen, wenn Sie einen Signalhandler erstellen müssen, damit Sie eine Referenz auf eine Funktion erstellen können, indem Sie diesem Funktionsnamen \ & voranstellen. Um diese Referenz zu dereferenzieren, müssen Sie lediglich eine Referenzvariable mit kaufmännischem Und & voranstellen. Das Folgende ist ein Beispiel -

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;
   
   foreach $item (%hash) {
      print "Item : $item\n"; } } %hash = ('name' => 'Tom', 'age' => 19); # Create a reference to above function. $cref = \&PrintHash;

# Function call using reference.
&$cref(%hash);

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Item : name
Item : Tom
Item : age
Item : 19

Perl verwendet eine Schreibvorlage namens "Format", um Berichte auszugeben. Um die Formatierungsfunktion von Perl zu verwenden, müssen Sie zuerst ein Format definieren und dann dieses Format zum Schreiben formatierter Daten verwenden.

Definieren Sie ein Format

Es folgt die Syntax zum Definieren eines Perl-Formats:

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

Hier FormatNamerepräsentiert den Namen des Formats. DasfieldlineAuf diese Weise sollten die Daten formatiert werden. Die Wertezeilen stellen die Werte dar, die in die Feldzeile eingegeben werden. Sie beenden das Format mit einem einzelnen Punkt.

Nächster fieldlinekann beliebigen Text oder Feldhalter enthalten. Die Feldhalter bieten Platz für Daten, die zu einem späteren Zeitpunkt dort abgelegt werden. Ein Feldhalter hat das Format -

@<<<<

Dieser Feldhalter ist linksbündig mit einem Feld von 5. Sie müssen das @ -Zeichen und die <-Zeichen zählen, um die Anzahl der Felder im Feld zu ermitteln. Andere Feldhalter sind -

@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder

Ein Beispielformat wäre -

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

In diesem Beispiel wird $ name innerhalb von 22 Zeichen als linksbündig und nach diesem Alter in zwei Leerzeichen geschrieben.

Verwenden des Formats

Um diese Formatdeklaration aufzurufen, verwenden wir die write Schlüsselwort -

write EMPLOYEE;

Das Problem ist, dass der Formatname normalerweise der Name eines geöffneten Dateihandles ist und die write-Anweisung die Ausgabe an dieses Dateihandle sendet. Da die Daten an STDOUT gesendet werden sollen, müssen wir EMPLOYEE dem STDOUT-Dateihandle zuordnen. Zunächst müssen wir jedoch mithilfe der Funktion select () sicherstellen, dass STDOUT unser ausgewähltes Dateihandle ist.

select(STDOUT);

Wir würden dann EMPLOYEE mit STDOUT verknüpfen, indem wir den neuen Formatnamen mit STDOUT setzen und die spezielle Variable $ ~ oder $ FORMAT_NAME wie folgt verwenden:

$~ = "EMPLOYEE";

Wenn wir jetzt ein write () ausführen, werden die Daten an STDOUT gesendet. Denken Sie daran: Wenn Sie Ihren Bericht in einem anderen Dateihandle anstelle von STDOUT schreiben möchten, können Sie mit der Funktion select () dieses Dateihandle auswählen, und der Rest der Logik bleibt unverändert.

Nehmen wir das folgende Beispiel. Hier haben wir fest codierte Werte, nur um die Verwendung anzuzeigen. Bei der tatsächlichen Verwendung lesen Sie Werte aus einer Datei oder Datenbank, um tatsächliche Berichte zu erstellen, und müssen möglicherweise den Abschlussbericht erneut in eine Datei schreiben.

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary =================================== . select(STDOUT); $~ = EMPLOYEE;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Bei der Ausführung wird das folgende Ergebnis erzielt:

===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Definieren Sie einen Berichtskopf

Alles sieht gut aus. Sie möchten jedoch Ihrem Bericht eine Kopfzeile hinzufügen. Dieser Header wird oben auf jeder Seite gedruckt. Das ist sehr einfach. Abgesehen von der Definition einer Vorlage müssten Sie einen Header definieren und ihn der Variablen $ ^ oder $ FORMAT_TOP_NAME zuweisen -

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE; $^ = EMPLOYEE_TOP;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Jetzt sieht Ihr Bericht so aus:

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Definieren Sie eine Paginierung

Was ist, wenn Ihr Bericht mehr als eine Seite umfasst? Sie haben eine Lösung dafür, verwenden Sie einfach$% oder $ FORMAT_PAGE_NUMBER zusammen mit dem Header wie folgt vairable -

format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
===================================                               
.

Jetzt sieht Ihre Ausgabe wie folgt aus:

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Anzahl der Zeilen auf einer Seite

Sie können die Anzahl der Zeilen pro Seite mithilfe einer speziellen Variablen festlegen $= (oder $ FORMAT_LINES_PER_PAGE), Standardmäßig ist $ = 60.

Definieren Sie eine Berichtsfußzeile

Während $ ^ oder $FORMAT_TOP_NAME contains the name of the current header format, there is no corresponding mechanism to automatically do the same thing for a footer. If you have a fixed-size footer, you can get footers by checking variable $- oder $ FORMAT_LINES_LEFT vor jedem Schreiben () und drucken Sie die Fußzeile bei Bedarf selbst in einem anderen Format, das wie folgt definiert ist -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Eine vollständige Liste der Variablen zum Formatieren finden Sie im Abschnitt Perl-Spezialvariablen .

Die Grundlagen des Umgangs mit Dateien sind einfach: Sie ordnen a zu filehandle mit einer externen Entität (normalerweise einer Datei) und verwenden Sie dann eine Vielzahl von Operatoren und Funktionen in Perl, um die Daten zu lesen und zu aktualisieren, die in dem mit dem Dateihandle verknüpften Datenstrom gespeichert sind.

Ein Dateihandle ist eine benannte interne Perl-Struktur, die eine physische Datei mit einem Namen verknüpft. Alle Dateihandles können lesen / schreiben, sodass Sie alle Dateien oder Geräte lesen und aktualisieren können, die einem Dateihandle zugeordnet sind. Wenn Sie jedoch ein Dateihandle zuordnen, können Sie den Modus angeben, in dem das Dateihandle geöffnet wird.

Drei grundlegende Dateihandles sind - STDIN, STDOUT, und STDERR, die Standardeingabe-, Standardausgabe- und Standardfehlergeräte darstellen.

Dateien öffnen und schließen

Es gibt zwei Funktionen mit mehreren Formularen, mit denen Sie jede neue oder vorhandene Datei in Perl öffnen können.

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

Hier ist FILEHANDLE das vom open Funktion und EXPR ist der Ausdruck mit dem Dateinamen und dem Modus zum Öffnen der Datei.

Funktion öffnen

Es folgt die zu öffnende Syntax file.txtim schreibgeschützten Modus. Hier bedeutet weniger als <Zeichen, dass die Datei im schreibgeschützten Modus geöffnet werden muss.

open(DATA, "<file.txt");

Hier ist DATA das Dateihandle, mit dem die Datei gelesen wird. Hier ist das Beispiel, das eine Datei öffnet und ihren Inhalt über den Bildschirm druckt.

#!/usr/bin/perl

open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!"; while(<DATA>) { print "$_";
}

Es folgt die Syntax zum Öffnen von file.txt im Schreibmodus. Hier bedeutet weniger als>, dass die Datei im Schreibmodus geöffnet werden muss.

open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";

In diesem Beispiel wird die Datei tatsächlich abgeschnitten (geleert), bevor sie zum Schreiben geöffnet wird. Dies ist möglicherweise nicht der gewünschte Effekt. Wenn Sie eine Datei zum Lesen und Schreiben öffnen möchten, können Sie vor den Zeichen> oder <ein Pluszeichen setzen.

Zum Beispiel, um eine Datei zum Aktualisieren zu öffnen, ohne sie abzuschneiden -

open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";

So schneiden Sie die Datei zuerst ab -

open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";

Sie können eine Datei im Anhänge-Modus öffnen. In diesem Modus wird der Schreibpunkt auf das Ende der Datei gesetzt.

open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";

Ein doppeltes >> öffnet die Datei zum Anhängen und platziert den Dateizeiger am Ende, sodass Sie sofort mit dem Anhängen von Informationen beginnen können. Sie können jedoch nur dann daraus lesen, wenn Sie auch ein Pluszeichen davor platzieren.

open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";

Es folgt die Tabelle, in der die möglichen Werte der verschiedenen Modi aufgeführt sind

Sr.Nr. Entitäten & Definition
1

< or r

Schreibgeschützter Zugriff

2

> or w

Erstellt, schreibt und schneidet ab

3

>> or a

Schreibt, hängt an und erstellt

4

+< or r+

Liest und schreibt

5

+> or w+

Liest, schreibt, erstellt und schneidet ab

6

+>> or a+

Liest, schreibt, hängt an und erstellt

Sysopen-Funktion

Das sysopen Die Funktion ähnelt der Hauptöffnungsfunktion, verwendet jedoch das System open() Funktion unter Verwendung der ihm zur Verfügung gestellten Parameter als Parameter für die Systemfunktion -

Um beispielsweise eine Datei zum Aktualisieren zu öffnen, emulieren Sie die +<filename Format von offen -

sysopen(DATA, "file.txt", O_RDWR);

Oder um die Datei vor dem Aktualisieren abzuschneiden -

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

Sie können O_CREAT verwenden, um eine neue Datei zu erstellen, und O_WRONLY, um eine Datei im schreibgeschützten Modus zu öffnen, und O_RDONLY, um eine Datei im schreibgeschützten Modus zu öffnen.

Das PERMSArgument gibt die Dateiberechtigungen für die angegebene Datei an, wenn diese erstellt werden muss. Standardmäßig dauert es0x666.

Es folgt die Tabelle, in der die möglichen Werte von MODE angegeben sind.

Sr.Nr. Entitäten & Definition
1

O_RDWR

Lesen und Schreiben

2

O_RDONLY

Schreibgeschützt

3

O_WRONLY

Nur schreiben

4

O_CREAT

Erstellen Sie die Datei

5

O_APPEND

Hängen Sie die Datei an

6

O_TRUNC

Schneiden Sie die Datei ab

7

O_EXCL

Stoppt, wenn die Datei bereits vorhanden ist

8

O_NONBLOCK

Nicht blockierende Benutzerfreundlichkeit

Funktion schließen

Um ein Dateihandle zu schließen und damit das Dateihandle von der entsprechenden Datei zu trennen, verwenden Sie die closeFunktion. Dadurch werden die Puffer des Dateihandles geleert und der Dateideskriptor des Systems geschlossen.

close FILEHANDLE
close

Wenn kein FILEHANDLE angegeben ist, wird das aktuell ausgewählte Dateihandle geschlossen. Es wird nur dann true zurückgegeben, wenn die Puffer erfolgreich geleert und die Datei geschlossen werden konnte.

close(DATA) || die "Couldn't close file properly";

Dateien lesen und schreiben

Sobald Sie ein offenes Dateihandle haben, müssen Sie in der Lage sein, Informationen zu lesen und zu schreiben. Es gibt verschiedene Möglichkeiten, Daten in die Datei zu lesen und zu schreiben.

Der Operator <FILEHANDL>

Die Hauptmethode zum Lesen der Informationen aus einem geöffneten Dateihandle ist der Operator <FILEHANDLE>. In einem skalaren Kontext wird eine einzelne Zeile aus dem Dateihandle zurückgegeben. Zum Beispiel -

#!/usr/bin/perl

print "What is your name?\n";
$name = <STDIN>;
print "Hello $name\n";

Wenn Sie den Operator <FILEHANDLE> in einem Listenkontext verwenden, wird eine Liste von Zeilen aus dem angegebenen Dateihandle zurückgegeben. Zum Beispiel, um alle Zeilen aus einer Datei in ein Array zu importieren -

#!/usr/bin/perl

open(DATA,"<import.txt") or die "Can't open data";
@lines = <DATA>;
close(DATA);

getc Funktion

Die Funktion getc gibt ein einzelnes Zeichen aus dem angegebenen FILEHANDLE oder STDIN zurück, wenn keines angegeben ist.

getc FILEHANDLE
getc

Wenn ein Fehler aufgetreten ist oder sich das Dateihandle am Ende der Datei befindet, wird stattdessen undef zurückgegeben.

Funktion lesen

Die Lesefunktion liest einen Informationsblock aus dem gepufferten Dateihandle: Mit dieser Funktion werden Binärdaten aus der Datei gelesen.

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

Die Länge der gelesenen Daten wird durch LENGTH definiert, und die Daten werden am Anfang von SCALAR platziert, wenn kein OFFSET angegeben ist. Andernfalls werden Daten nach OFFSET-Bytes in SCALAR platziert. Die Funktion gibt die Anzahl der bei Erfolg gelesenen Bytes zurück, Null am Ende der Datei oder undef, wenn ein Fehler aufgetreten ist.

Druckfunktion

Bei all den verschiedenen Methoden zum Lesen von Informationen aus Dateihandles ist die Hauptfunktion zum Zurückschreiben von Informationen die Druckfunktion.

print FILEHANDLE LIST
print LIST
print

Die Druckfunktion druckt den ausgewerteten Wert von LIST in FILEHANDLE oder in das aktuelle Ausgabe-Dateihandle (standardmäßig STDOUT). Zum Beispiel -

print "Hello World!\n";

Dateien kopieren

Hier ist das Beispiel, in dem eine vorhandene Datei file1.txt geöffnet, zeilenweise gelesen und eine weitere Kopierdatei file2.txt generiert wird.

#!/usr/bin/perl

# Open file to read
open(DATA1, "<file1.txt");

# Open new file to write
open(DATA2, ">file2.txt");

# Copy data from one file to another.
while(<DATA1>) {
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

Datei umbenennen

Hier ist ein Beispiel, das zeigt, wie wir eine Datei file1.txt in file2.txt umbenennen können. Angenommen, die Datei ist im Verzeichnis / usr / test verfügbar.

#!/usr/bin/perl

rename ("/usr/test/file1.txt", "/usr/test/file2.txt" );

Diese Funktion renames nimmt zwei Argumente und benennt nur die vorhandene Datei um.

Vorhandene Datei löschen

Hier ist ein Beispiel, das zeigt, wie eine Datei file1.txt mit dem gelöscht wird unlink Funktion.

#!/usr/bin/perl

unlink ("/usr/test/file1.txt");

Positionierung in einer Datei

Sie können verwenden, um tell Funktion, um die aktuelle Position einer Datei zu kennen und seek Funktion zum Zeigen einer bestimmten Position innerhalb der Datei.

Funktion erzählen

Die erste Voraussetzung ist, Ihre Position in einer Datei zu finden, was Sie mit der Tell-Funktion tun -

tell FILEHANDLE
tell

Dies gibt die Position des Dateizeigers in Bytes innerhalb von FILEHANDLE zurück, falls angegeben, oder das aktuell standardmäßig ausgewählte Dateihandle, falls keines angegeben ist.

Funktion suchen

Die Suchfunktion positioniert den Dateizeiger auf die angegebene Anzahl von Bytes in einer Datei -

seek FILEHANDLE, POSITION, WHENCE

Die Funktion verwendet die fseek-Systemfunktion, und Sie haben die gleiche Fähigkeit, relativ zu drei verschiedenen Punkten zu positionieren: dem Start, dem Ende und der aktuellen Position. Sie tun dies, indem Sie einen Wert für WHENCE angeben.

Null legt die Position relativ zum Dateianfang fest. Beispielsweise setzt die Zeile den Dateizeiger auf das 256. Byte in der Datei.

seek DATA, 256, 0;

Dateiinformationen

Sie können bestimmte Funktionen in Perl sehr schnell mit einer Reihe von Testoperatoren testen, die zusammen als -X-Tests bezeichnet werden. Um beispielsweise einen schnellen Test der verschiedenen Berechtigungen für eine Datei durchzuführen, können Sie ein Skript wie das folgende verwenden:

#/usr/bin/perl

my $file = "/usr/test/file1.txt"; my (@description, $size);
if (-e $file) { push @description, 'binary' if (-B _); push @description, 'a socket' if (-S _); push @description, 'a text file' if (-T _); push @description, 'a block special file' if (-b _); push @description, 'a character special file' if (-c _); push @description, 'a directory' if (-d _); push @description, 'executable' if (-x _); push @description, (($size = -s _)) ? "$size bytes" : 'empty'; print "$file is ", join(', ',@description),"\n";
}

Hier ist die Liste der Funktionen, die Sie für eine Datei oder ein Verzeichnis überprüfen können -

Sr.Nr. Operator & Definition
1

-A

Startzeit des Skripts abzüglich der letzten Zugriffszeit der Datei in Tagen.

2

-B

Ist es eine Binärdatei?

3

-C

Startzeit des Skripts abzüglich der letzten Inode-Änderungszeit der Datei in Tagen.

3

-M

Startzeit des Skripts abzüglich der Änderungszeit der Datei in Tagen.

4

-O

Ist die Datei im Besitz der realen Benutzer-ID?

5

-R

Ist die Datei für die reale Benutzer-ID oder die reale Gruppe lesbar?

6

-S

Ist die Datei ein Socket?

7

-T

Ist es eine Textdatei?

8

-W

Ist die Datei durch die reale Benutzer-ID oder die reale Gruppe beschreibbar?

9

-X

Ist die Datei mit der realen Benutzer-ID oder der realen Gruppe ausführbar?

10

-b

Ist es eine Block-Spezialdatei?

11

-c

Ist es eine spezielle Zeichendatei?

12

-d

Ist die Datei ein Verzeichnis?

13

-e

Existiert die Datei?

14

-f

Ist es eine einfache Datei?

15

-g

Hat die Datei das setgid-Bit gesetzt?

16

-k

Hat die Datei das Sticky-Bit gesetzt?

17

-l

Ist die Datei ein symbolischer Link?

18

-o

Ist die Datei im Besitz der effektiven Benutzer-ID?

19

-p

Ist die Datei eine Named Pipe?

20

-r

Ist die Datei für die effektive Benutzer- oder Gruppen-ID lesbar?

21

-s

Gibt die Größe der Datei zurück, Nullgröße = leere Datei.

22

-t

Wird das Dateihandle von einem TTY (Terminal) geöffnet?

23

-u

Hat die Datei das Setuid-Bit gesetzt?

24

-w

Ist die Datei durch die effektive Benutzer- oder Gruppen-ID beschreibbar?

25

-x

Ist die Datei durch die effektive Benutzer- oder Gruppen-ID ausführbar?

26

-z

Ist die Dateigröße Null?

Im Folgenden sind die Standardfunktionen aufgeführt, die zum Spielen mit Verzeichnissen verwendet werden.

opendir DIRHANDLE, EXPR  # To open a directory
readdir DIRHANDLE        # To read a directory
rewinddir DIRHANDLE      # Positioning pointer to the begining
telldir DIRHANDLE        # Returns current position of the dir
seekdir DIRHANDLE, POS   # Pointing pointer to POS inside dir
closedir DIRHANDLE       # Closing a directory.

Alle Dateien anzeigen

Es gibt verschiedene Möglichkeiten, alle in einem bestimmten Verzeichnis verfügbaren Dateien aufzulisten. Verwenden wir zunächst die einfache Methode, um alle Dateien mithilfe von zu erhalten und aufzulistenglob Betreiber -

#!/usr/bin/perl

# Display all the files in /tmp directory.
$dir = "/tmp/*"; my @files = glob( $dir );

foreach (@files ) {
   print $_ . "\n"; } # Display all the C source files in /tmp directory. $dir = "/tmp/*.c";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

# Display all the hidden files.
$dir = "/tmp/.*"; @files = glob( $dir );
foreach (@files ) {
   print $_ . "\n"; } # Display all the files from /tmp and /home directories. $dir = "/tmp/* /home/*";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

Hier ist ein weiteres Beispiel, das ein Verzeichnis öffnet und alle in diesem Verzeichnis verfügbaren Dateien auflistet.

#!/usr/bin/perl

opendir (DIR, '.') or die "Couldn't open directory, $!"; while ($file = readdir DIR) {
   print "$file\n";
}
closedir DIR;

Ein weiteres Beispiel zum Drucken der Liste der C-Quelldateien, die Sie möglicherweise verwenden, ist:

#!/usr/bin/perl

opendir(DIR, '.') or die "Couldn't open directory, $!";
foreach (sort grep(/^.*\.c$/,readdir(DIR))) { print "$_\n";
}
closedir DIR;

Neues Verzeichnis erstellen

Sie können verwenden mkdirFunktion zum Erstellen eines neuen Verzeichnisses. Sie benötigen die erforderliche Berechtigung, um ein Verzeichnis zu erstellen.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This creates perl directory in /tmp directory. mkdir( $dir ) or die "Couldn't create $dir directory, $!";
print "Directory created successfully\n";

Entfernen Sie ein Verzeichnis

Sie können verwenden rmdirFunktion zum Entfernen eines Verzeichnisses. Sie benötigen die erforderliche Berechtigung, um ein Verzeichnis zu entfernen. Außerdem sollte dieses Verzeichnis leer sein, bevor Sie versuchen, es zu entfernen.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This removes perl directory from /tmp directory. rmdir( $dir ) or die "Couldn't remove $dir directory, $!";
print "Directory removed successfully\n";

Ändern Sie ein Verzeichnis

Sie können verwenden chdirFunktion zum Ändern eines Verzeichnisses und zum Wechseln an einen neuen Speicherort. Sie benötigen die erforderliche Berechtigung, um ein Verzeichnis zu ändern und in das neue Verzeichnis zu wechseln.

#!/usr/bin/perl

$dir = "/home"; # This changes perl directory and moves you inside /home directory. chdir( $dir ) or die "Couldn't go inside $dir directory, $!";
print "Your new location is $dir\n";

Die Ausführung und die Fehler gehören immer zusammen. Wenn Sie eine Datei öffnen, die nicht vorhanden ist. Wenn Sie mit dieser Situation nicht richtig umgegangen sind, wird Ihr Programm als von schlechter Qualität eingestuft.

Das Programm stoppt, wenn ein Fehler auftritt. Daher wird eine ordnungsgemäße Fehlerbehandlung verwendet, um verschiedene Arten von Fehlern zu behandeln, die während einer Programmausführung auftreten können, und geeignete Maßnahmen zu ergreifen, anstatt das Programm vollständig anzuhalten.

Sie können einen Fehler auf verschiedene Arten identifizieren und abfangen. Es ist sehr einfach, Fehler in Perl abzufangen und sie dann richtig zu behandeln. Hier sind einige Methoden, die verwendet werden können.

Die if-Anweisung

Das if statementist die naheliegende Wahl, wenn Sie den Rückgabewert einer Anweisung überprüfen müssen. zum Beispiel -

if(open(DATA, $file)) {
   ...
} else {
   die "Error: Couldn't open the file - $!";
}

Hier Variable $! gibt die eigentliche Fehlermeldung zurück. Alternativ können wir die Anweisung in Situationen, in denen dies sinnvoll ist, auf eine Zeile reduzieren. zum Beispiel -

open(DATA, $file) || die "Error: Couldn't open the file $!";

Die es sei denn Funktion

Das unlessFunktion ist das logische Gegenteil von if: Anweisungen können den Erfolgsstatus vollständig umgehen und nur ausgeführt werden, wenn der Ausdruck false zurückgibt. Zum Beispiel -

unless(chdir("/etc")) {
   die "Error: Can't change directory - $!";
}

Das unlessDie Anweisung wird am besten verwendet, wenn Sie einen Fehler oder eine Alternative nur dann auslösen möchten, wenn der Ausdruck fehlschlägt. Die Anweisung ist auch sinnvoll, wenn sie in einer einzeiligen Anweisung verwendet wird -

die "Error: Can't change directory!: $!" unless(chdir("/etc"));

Hier sterben wir nur, wenn die chdir-Operation fehlschlägt und sie gut liest.

Der ternäre Operator

Für sehr kurze Tests können Sie den bedingten Operator verwenden ?:

print(exists($hash{value}) ? 'There' : 'Missing',"\n");

Es ist hier nicht ganz so klar, was wir erreichen wollen, aber der Effekt ist der gleiche wie bei der Verwendung eines if oder unlessErklärung. Der bedingte Operator wird am besten verwendet, wenn Sie schnell einen der beiden Werte innerhalb eines Ausdrucks oder einer Anweisung zurückgeben möchten.

Die Warnfunktion

Die Warnfunktion löst nur eine Warnung aus, eine Nachricht wird an STDERR gedruckt, es werden jedoch keine weiteren Maßnahmen ergriffen. Daher ist es nützlicher, wenn Sie nur eine Warnung für den Benutzer drucken und mit dem Rest des Vorgangs fortfahren möchten.

chdir('/etc') or warn "Can't change directory";

Die Würfelfunktion

Die Die-Funktion funktioniert genauso wie warn, außer dass sie auch exit aufruft. Innerhalb eines normalen Skripts bewirkt diese Funktion, dass die Ausführung sofort beendet wird. Sie sollten diese Funktion verwenden, falls es sinnlos ist, fortzufahren, wenn ein Fehler im Programm vorliegt -

chdir('/etc') or die "Can't change directory";

Fehler innerhalb der Module

Es gibt zwei verschiedene Situationen, mit denen wir umgehen sollten -

  • Melden eines Fehlers in einem Modul, in dem der Dateiname und die Zeilennummer des Moduls angegeben sind. Dies ist nützlich, wenn Sie ein Modul debuggen oder wenn Sie speziell einen modulbezogenen Fehler anstelle eines skriptbezogenen Fehlers auslösen möchten.

  • Melden eines Fehlers in einem Modul, das die Informationen des Anrufers zitiert, damit Sie die Zeile innerhalb des Skripts debuggen können, die den Fehler verursacht hat. Auf diese Weise hervorgerufene Fehler sind für den Endbenutzer nützlich, da sie den Fehler in Bezug auf die Ursprungszeile des aufrufenden Skripts hervorheben.

Das warn und dieFunktionen funktionieren etwas anders als erwartet, wenn sie innerhalb eines Moduls aufgerufen werden. Zum Beispiel das einfache Modul -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   warn "Error in module!";
}
1;

Wenn aus einem Skript wie unten aufgerufen -

use T;
function();

Es wird das folgende Ergebnis erzeugt -

Error in module! at T.pm line 9.

Dies ist mehr oder weniger das, was Sie erwartet haben, aber nicht unbedingt das, was Sie wollen. Aus Sicht eines Modulprogrammierers sind die Informationen nützlich, da sie auf einen Fehler im Modul selbst hinweisen. Für einen Endbenutzer sind die bereitgestellten Informationen ziemlich nutzlos, und für alle außer dem gehärteten Programmierer sind sie völlig sinnlos.

Die Lösung für solche Probleme ist das Carp-Modul, das eine vereinfachte Methode zum Melden von Fehlern in Modulen bietet, die Informationen über das aufrufende Skript zurückgeben. Das Karpfenmodul bietet vier Funktionen: Karpfen, Glucksen, Krächzen und Geständnis. Diese Funktionen werden unten diskutiert.

Die Karpfenfunktion

Die Karpfenfunktion ist das grundlegende Äquivalent von warn und druckt die Nachricht an STDERR, ohne das Skript tatsächlich zu verlassen und den Skriptnamen zu drucken.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   carp "Error in module!";
}
1;

Wenn aus einem Skript wie unten aufgerufen -

use T;
function();

Es wird das folgende Ergebnis erzeugt -

Error in module! at test.pl line 4

Die Gluckfunktion

Die Cluck-Funktion ist eine Art aufgeladener Karpfen. Sie folgt demselben Grundprinzip, druckt jedoch auch eine Stapelverfolgung aller Module, die zum Aufruf der Funktion geführt haben, einschließlich der Informationen im ursprünglichen Skript.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp qw(cluck);

sub function {
   cluck "Error in module!";
}
1;

Wenn aus einem Skript wie unten aufgerufen -

use T;
function();

Es wird das folgende Ergebnis erzeugt -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Die Krächzfunktion

Das croak Funktion ist äquivalent zu die, außer dass der Anrufer eine Ebene höher gemeldet wird. Wie die beendet auch diese Funktion das Skript, nachdem der Fehler an STDERR gemeldet wurde -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   croak "Error in module!";
}
1;

Wenn aus einem Skript wie unten aufgerufen -

use T;
function();

Es wird das folgende Ergebnis erzeugt -

Error in module! at test.pl line 4

Wie bei Karpfen gelten die gleichen Grundregeln für das Einbeziehen von Zeilen- und Dateiinformationen gemäß den Warn- und Matrizenfunktionen.

Die Geständnisfunktion

Das confess Funktion ist wie cluck;; Es ruft die auf und druckt dann eine Stapelverfolgung bis zum Ursprungsskript.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   confess "Error in module!";
}
1;

Wenn aus einem Skript wie unten aufgerufen -

use T;
function();

Es wird das folgende Ergebnis erzeugt -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Es gibt einige Variablen, die in Perl eine vordefinierte und besondere Bedeutung haben. Dies sind die Variablen, die Interpunktionszeichen nach dem üblichen Variablenindikator ($, @ oder%) verwenden, z. B. $ _ (siehe unten).

Die meisten speziellen Variablen haben einen englischen langen Namen, z. B. die Betriebssystemfehlervariable $! kann als $ OS_ERROR geschrieben werden. Aber wenn Sie englische Namen verwenden möchten, müssen Sie eine Zeile einfügenuse English;oben in Ihrer Programmdatei. Dies führt den Interpreter dazu, die genaue Bedeutung der Variablen zu erfassen.

Die am häufigsten verwendete Spezialvariable ist $ _, die die Standardeingabe und die Mustersuchzeichenfolge enthält. Zum Beispiel in den folgenden Zeilen -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Bei der Ausführung wird das folgende Ergebnis erzielt:

hickory
dickory
doc

Lassen Sie uns noch einmal dasselbe Beispiel überprüfen, ohne die Variable $ _ explizit zu verwenden -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Bei der Ausführung wird auch das folgende Ergebnis erzielt:

hickory
dickory
doc

Bei der ersten Ausführung der Schleife wird "Hickory" gedruckt. Beim zweiten Mal wird "dickory" gedruckt, und beim dritten Mal wird "doc" gedruckt. Dies liegt daran, dass in jeder Iteration der Schleife die aktuelle Zeichenfolge eingefügt wird$_, and is used by default by print. Here are the places where Perl will assume $_ auch wenn Sie es nicht angeben -

  • Verschiedene unäre Funktionen, einschließlich Funktionen wie ord und int sowie alle Dateitests (-f, -d) mit Ausnahme von -t, der standardmäßig STDIN ist.

  • Verschiedene Listenfunktionen wie Drucken und Aufheben der Verknüpfung.

  • Die Mustervergleichsoperationen m //, s /// und tr /// bei Verwendung ohne einen Operator = ~.

  • Die Standard-Iteratorvariable in einer foreach-Schleife, wenn keine andere Variable angegeben wird.

  • Die implizite Iteratorvariable in den Funktionen grep und map.

  • Der Standardort zum Einfügen eines Eingabedatensatzes, wenn das Ergebnis einer Zeileneingabeoperation als einziges Kriterium eines while-Tests (dh) selbst getestet wird. Beachten Sie, dass dies außerhalb eines Weile-Tests nicht der Fall ist.

Spezielle Variablentypen

Basierend auf der Verwendung und Art der speziellen Variablen können wir sie in die folgenden Kategorien einteilen:

  • Globale skalare Spezialvariablen.
  • Globale Array-Spezialvariablen.
  • Globale Hash-Spezialvariablen.
  • Globale spezielle Dateihandles.
  • Globale Sonderkonstanten.
  • Spezielle Variablen für reguläre Ausdrücke.
  • Dateihandle-Spezialvariablen.

Globale skalare Spezialvariablen

Hier ist die Liste aller skalaren Spezialvariablen. Wir haben entsprechende englische Namen zusammen mit den symbolischen Namen aufgelistet.

$ _ Der Standardeingabe- und Mustersuchbereich.
$ ARG
$. Die aktuelle Eingabezeilennummer des zuletzt gelesenen Dateihandles. Ein explizites Schließen des Dateihandles setzt die Zeilennummer zurück.
$ NR
$ / Das Trennzeichen für Eingabedatensätze; Zeilenumbruch standardmäßig. Wenn die Nullzeichenfolge festgelegt ist, werden Leerzeilen als Trennzeichen behandelt.
$ RS
$, Das Ausgabefeldtrennzeichen für den Druckoperator.
$ OFS
$ \ Das Trennzeichen für den Ausgabedatensatz für den Druckoperator.
$ ORS
$ " Wie "$", außer dass es für Listenwerte gilt, die in eine Zeichenfolge in doppelten Anführungszeichen (oder eine ähnlich interpretierte Zeichenfolge) interpoliert wurden. Standard ist ein Leerzeichen.
$ LIST_SEPARATOR
$; Das tiefgestellte Trennzeichen für die mehrdimensionale Array-Emulation. Standard ist "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L. Was für ein Format wird ausgegeben, um einen Formfeed durchzuführen. Standard ist "\ f".
$ FORMAT_FORMFEED
$: Der aktuelle Zeichensatz, nach dem eine Zeichenfolge unterbrochen werden kann, um Fortsetzungsfelder (beginnend mit ^) in einem Format zu füllen. Standard ist "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A. Der aktuelle Wert des Schreibakkumulators für Formatzeilen.
$ AKKU
$ # Enthält das Ausgabeformat für gedruckte Zahlen (veraltet).
$ OFMT
$? Der Status, der vom letzten Pipe-Schließen, Backtick-Befehl (``) oder Systembetreiber zurückgegeben wurde.
$ CHILD_ERROR
$! Bei Verwendung in einem numerischen Kontext wird der aktuelle Wert der Variablen errno angegeben, wodurch der letzte Systemaufruffehler identifiziert wird. Bei Verwendung in einem Zeichenfolgenkontext wird die entsprechende Systemfehlerzeichenfolge ausgegeben.
$OS_ERROR or $ERRNO
$ @ Die Perl-Syntaxfehlermeldung vom letzten Auswertungsbefehl.
$ EVAL_ERROR
$$ Die PID des Perl-Prozesses, auf dem dieses Skript ausgeführt wird.
$ PROCESS_ID oder $ PID
$ < Die tatsächliche Benutzer-ID (UID) dieses Prozesses.
$REAL_USER_ID or $UID
$> Die effektive Benutzer-ID dieses Prozesses.
$ EFFECTIVE_USER_ID oder $ EUID
$ ( Die reale Gruppen-ID (gid) dieses Prozesses.
$REAL_GROUP_ID or $GID
$) Das effektive Gid dieses Prozesses.
$ EFFECTIVE_GROUP_ID oder $ EGID
$ 0 Enthält den Namen der Datei, die das ausgeführte Perl-Skript enthält.
$ PROGRAM_NAME
$ [ Der Index des ersten Elements in einem Array und des ersten Zeichens in einem Teilstring. Standard ist 0.
$] Gibt die Version plus Patchlevel geteilt durch 1000 zurück.
$ PERL_VERSION
$ ^ D. Der aktuelle Wert der Debugging-Flags.
$ DEBUGGING
$ ^ E. Erweiterte Fehlermeldung auf einigen Plattformen.
$ EXTENDED_OS_ERROR
$ ^ F. Der maximale Systemdateideskriptor, normalerweise 2.
$ SYSTEM_FD_MAX
$ ^ H. Enthält interne Compiler-Hinweise, die von bestimmten pragmatischen Modulen aktiviert werden.
$ ^ I. Der aktuelle Wert der Inplace-Edit-Erweiterung. Verwenden Sie undef, um die Inplace-Bearbeitung zu deaktivieren.
$ INPLACE_EDIT
$ ^ M. Die Inhalte von $M can be used as an emergency memory pool in case Perl dies with an out-of-memory error. Use of $M erfordert eine spezielle Zusammenstellung von Perl. Weitere Informationen finden Sie im INSTALL-Dokument.
$ ^ O. Enthält den Namen des Betriebssystems, für das die aktuelle Perl-Binärdatei kompiliert wurde.
$ OSNAME
$ ^ P. Das interne Flag, das der Debugger löscht, damit er sich nicht selbst debuggt.
$ PERLDB
$ ^ T. Die Zeit, zu der das Skript in Sekunden seit der Epoche ausgeführt wurde.
$ BASETIME
$ ^ W. Der aktuelle Wert des Warnschalters, entweder wahr oder falsch.
$ WARNUNG
$ ^ X. Der Name, unter dem die Perl-Binärdatei selbst ausgeführt wurde.
$ EXECUTABLE_NAME
$ ARGV Enthält den Namen der aktuellen Datei beim Lesen von <ARGV>.

Globale Array-Spezialvariablen

@ ARGV Das Array mit den für das Skript bestimmten Befehlszeilenargumenten.
@INC Das Array mit der Liste der Stellen, an denen nach Perl-Skripten gesucht werden soll, die von den Konstrukten do, require oder use ausgewertet werden sollen.
@F Das Array, in das die Eingabezeilen aufgeteilt werden, wenn der Befehlszeilenschalter -a angegeben wird.

Globale Hash-Spezialvariablen

% INC Der Hash, der Einträge für den Dateinamen jeder Datei enthält, die über do oder require eingefügt wurde.
% ENV Der Hash, der Ihre aktuelle Umgebung enthält.
% SIG Der Hash, mit dem Signalhandler für verschiedene Signale eingestellt werden.

Globale spezielle Dateihandles

ARGV Das spezielle Dateihandle, das in @ARGV über Befehlszeilendateinamen iteriert. Wird normalerweise als Null-Dateihandle in <> geschrieben.
STDERR Das spezielle Dateihandle für Standardfehler in jedem Paket.
STDIN Das spezielle Dateihandle für die Standardeingabe in jedem Paket.
STDOUT Das spezielle Dateihandle für die Standardausgabe in jedem Paket.
DATEN Das spezielle Dateihandle, das sich auf alles bezieht, was auf das Token __END__ in der Datei folgt, die das Skript enthält. Oder das spezielle Dateihandle für alles, was dem Token __DATA__ in einer erforderlichen Datei folgt, solange Sie Daten im selben Paket lesen __DATA__ in.
_ (Unterstrich) Das spezielle Dateihandle, mit dem die Informationen des letzten stat-, lstat- oder Dateitestoperators zwischengespeichert werden.

Globale Sonderkonstanten

__ENDE__ Zeigt das logische Ende Ihres Programms an. Jeder folgende Text wird ignoriert, kann jedoch über das DATA-Dateihandle gelesen werden.
__DATEI__ Stellt den Dateinamen an der Stelle in Ihrem Programm dar, an der er verwendet wird. Nicht in Strings interpoliert.
__LINIE__ Repräsentiert die aktuelle Zeilennummer. Nicht in Strings interpoliert.
__PAKET__ Stellt den aktuellen Paketnamen zur Kompilierungszeit dar oder undefiniert, wenn kein aktuelles Paket vorhanden ist. Nicht in Strings interpoliert.

Spezielle Variablen für reguläre Ausdrücke

$ digit Enthält den Text, der mit den entsprechenden Klammern im zuletzt übereinstimmenden Muster übereinstimmt. Zum Beispiel stimmt $ 1 mit dem überein, was im ersten Satz von Klammern im vorherigen regulären Ausdruck enthalten war.
$ & Die Zeichenfolge, die mit der letzten erfolgreichen Musterübereinstimmung übereinstimmt.
$ MATCH
$ ` Die Zeichenfolge vor allem, was mit der letzten erfolgreichen Musterübereinstimmung übereinstimmt.
$ PREMATCH
$ ' Die Zeichenfolge, die auf die letzte erfolgreiche Musterübereinstimmung folgt.
$ POSTMATCH
$ + Die letzte Klammer, die mit dem letzten Suchmuster übereinstimmt. Dies ist nützlich, wenn Sie nicht wissen, welches der alternativen Muster übereinstimmt. Zum Beispiel: / Version: (. *) | Revision: (. *) / && ($rev = $+);
$ LAST_PAREN_MATCH

Dateihandle-Spezialvariablen

$ | Bei Einstellung ungleich Null wird nach jedem Schreiben oder Drucken auf dem aktuell ausgewählten Ausgangskanal ein Flush (3) erzwungen.
$ OUTPUT_AUTOFLUSH
$% Die aktuelle Seitenzahl des aktuell ausgewählten Ausgangskanals.
$ FORMAT_PAGE_NUMBER
$ = Die aktuelle Seitenlänge (druckbare Zeilen) des aktuell ausgewählten Ausgabekanals. Standard ist 60.
$ FORMAT_LINES_PER_PAGE
$ - Die Anzahl der Zeilen, die auf der Seite des aktuell ausgewählten Ausgangskanals verbleiben.
$ FORMAT_LINES_LEFT
$ ~ Der Name des aktuellen Berichtsformats für den aktuell ausgewählten Ausgabekanal. Standard ist der Name des Dateihandles.
$ FORMAT_NAME
$ ^ Der Name des aktuellen Top-of-Page-Formats für den aktuell ausgewählten Ausgabekanal. Standard ist der Name des Dateihandles, an das _TOP angehängt ist.
$ FORMAT_TOP_NAME

Jeder Programmierer hat natürlich seine eigenen Vorlieben in Bezug auf die Formatierung, aber es gibt einige allgemeine Richtlinien, die das Lesen, Verstehen und Verwalten Ihrer Programme erleichtern.

Das Wichtigste ist, dass Sie Ihre Programme jederzeit unter dem Flag -w ausführen. Sie können es für bestimmte Teile des Codes explizit über das Pragma ohne Warnungen oder die Variable $ ^ W deaktivieren, wenn Sie müssen. Sie sollten auch immer unter strikter Verwendung laufen oder den Grund dafür kennen. Die Verwendung von Sigtrap und sogar die Verwendung von Diagnose-Pragmas können sich ebenfalls als nützlich erweisen.

In Bezug auf die Ästhetik des Code-Layouts ist Larry nur der Meinung, dass die schließende geschweifte Klammer eines mehrzeiligen BLOCK mit dem Schlüsselwort übereinstimmen sollte, mit dem das Konstrukt gestartet wurde. Darüber hinaus hat er andere Vorlieben, die nicht so stark sind -

  • 4-spaltiger Einzug.
  • Wenn möglich, lockig in derselben Zeile wie das Schlüsselwort öffnen, andernfalls in einer Zeile.
  • Leerzeichen vor dem öffnenden Locken eines mehrzeiligen BLOCKES.
  • Einzeiliger BLOCK kann in eine Zeile eingefügt werden, einschließlich Locken.
  • Kein Leerzeichen vor dem Semikolon.
  • Semikolon im "kurzen" einzeiligen BLOCK weggelassen.
  • Platz um die meisten Operatoren.
  • Leerzeichen um einen "komplexen" Index (in Klammern).
  • Leere Linien zwischen Stücken, die verschiedene Dinge tun.
  • Andere ungekuschelt.
  • Kein Leerzeichen zwischen Funktionsname und öffnender Klammer.
  • Leerzeichen nach jedem Komma.
  • Lange Zeilen nach einem Operator unterbrochen (außer und und oder).
  • Leerzeichen nach dem letzten Klammerabgleich in der aktuellen Zeile.
  • Richten Sie die entsprechenden Elemente vertikal aus.
  • Lassen Sie redundante Interpunktion aus, solange die Klarheit nicht leidet.

Hier sind einige weitere inhaltliche Stilprobleme, über die Sie nachdenken sollten: Nur weil Sie etwas auf eine bestimmte Weise tun KÖNNEN, heißt das nicht, dass Sie es auf diese Weise tun sollten. Perl bietet Ihnen verschiedene Möglichkeiten, etwas zu tun. Wählen Sie daher die am besten lesbare aus. Zum Beispiel -

open(FOO,$foo) || die "Can't open $foo: $!";

Ist besser als -

die "Can't open $foo: $!" unless open(FOO,$foo);

Weil der zweite Weg den Hauptpunkt der Anweisung in einem Modifikator verbirgt. Andererseits,

print "Starting analysis\n" if $verbose;

Ist besser als -

$verbose && print "Starting analysis\n";

Denn der Hauptpunkt ist nicht, ob der Benutzer -v eingegeben hat oder nicht.

Gehen Sie nicht durch dumme Verrenkungen, um eine Schleife oben oder unten zu verlassen, wenn Perl den letzten Operator bereitstellt, damit Sie in der Mitte beenden können. Einfach ein wenig "übertreffen", um es sichtbarer zu machen -

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

Lassen Sie uns einige weitere wichtige Punkte sehen -

  • Haben Sie keine Angst, Loop-Labels zu verwenden - sie dienen dazu, die Lesbarkeit zu verbessern und mehrstufige Loop-Unterbrechungen zu ermöglichen. Siehe das vorherige Beispiel.

  • Vermeiden Sie die Verwendung von grep () (oder map ()) oder `backticks` in einem leeren Kontext, wenn Sie nur deren Rückgabewerte wegwerfen. Diese Funktionen haben alle Rückgabewerte. Verwenden Sie sie daher. Verwenden Sie andernfalls stattdessen eine foreach () -Schleife oder die system () -Funktion.

  • Wenn Sie Funktionen verwenden, die möglicherweise nicht auf jedem Computer implementiert sind, testen Sie das Konstrukt aus Gründen der Portabilität in einer Bewertung, um festzustellen, ob es fehlschlägt. Wenn Sie wissen, in welcher Version oder auf welchem ​​Patchlevel eine bestimmte Funktion implementiert wurde, können Sie $] ($ PERL_VERSION auf Englisch) testen, um festzustellen, ob sie vorhanden sein wird. Mit dem Konfigurationsmodul können Sie auch Werte abfragen, die vom Konfigurationsprogramm bei der Installation von Perl festgelegt wurden.

  • Wählen Sie mnemonische Bezeichner. Wenn Sie sich nicht erinnern können, was Mnemonik bedeutet, haben Sie ein Problem.

  • Während kurze Bezeichner wie $ gotit wahrscheinlich in Ordnung sind, verwenden Sie Unterstriche, um Wörter in längeren Bezeichnern zu trennen. Es ist im Allgemeinen leichter zu lesen$var_names_like_this than $VarNamesLikeThis, insbesondere für Nicht-Muttersprachler von Englisch. Es ist auch eine einfache Regel, die konsistent mit VAR_NAMES_LIKE_THIS funktioniert.

  • Paketnamen sind manchmal eine Ausnahme von dieser Regel. Perl reserviert informell Modulnamen in Kleinbuchstaben für "Pragma" -Module wie Integer und Strict. Andere Module sollten mit einem Großbuchstaben beginnen und gemischte Groß- und Kleinschreibung verwenden, jedoch wahrscheinlich ohne Unterstriche, da die Darstellung von Modulnamen durch primitive Dateisysteme als Dateien, die in einige wenige Bytes passen müssen, eingeschränkt ist.

  • Wenn Sie einen wirklich haarigen regulären Ausdruck haben, verwenden Sie den Modifikator / x und geben Sie ein Leerzeichen ein, damit er etwas weniger wie Linienrauschen aussieht. Verwenden Sie keinen Schrägstrich als Trennzeichen, wenn Ihr regulärer Ausdruck Schrägstriche oder umgekehrte Schrägstriche aufweist.

  • Überprüfen Sie immer die Rückkehrcodes von Systemaufrufen. Gute Fehlermeldungen sollten an STDERR gesendet werden, einschließlich des Programms, das das Problem verursacht hat, des fehlgeschlagenen Systemaufrufs und der fehlgeschlagenen Argumente, und (SEHR WICHTIG) sollten die Standard-Systemfehlermeldung für die Fehler enthalten. Hier ist ein einfaches, aber ausreichendes Beispiel -

opendir(D, $dir) or die "can't opendir $dir: $!";
  • Denken Sie an die Wiederverwendbarkeit. Warum sollten Sie bei einem One-Shot Brainpower verschwenden, wenn Sie so etwas vielleicht noch einmal machen möchten? Ziehen Sie in Betracht, Ihren Code zu verallgemeinern. Erwägen Sie das Schreiben eines Moduls oder einer Objektklasse. Erwägen Sie, Ihren Code mit strikter Verwendung sauber auszuführen und Warnungen (oder -w) zu verwenden. Erwägen Sie, Ihren Code preiszugeben. Erwägen Sie, Ihr gesamtes Weltbild zu ändern. Bedenken Sie ... oh, egal.

  • Seien Sie konsequent.

  • Sei nett.

Ein regulärer Ausdruck ist eine Zeichenfolge, die das Muster oder die Muster definiert, die Sie anzeigen. Die Syntax von regulären Ausdrücken in Perl ist sehr ähnlich zu der, die Sie in anderen Programmen finden, die reguläre Ausdrücke unterstützensed, grep, und awk.

Die grundlegende Methode zum Anwenden eines regulären Ausdrucks besteht darin, die Musterbindungsoperatoren = ~ und zu verwenden !~. Der erste Operator ist ein Test- und Zuweisungsoperator.

In Perl gibt es drei Operatoren für reguläre Ausdrücke.

  • Übereinstimmenden regulären Ausdruck - m //
  • Regulären Ausdruck ersetzen - s ///
  • Regulatorischen Ausdruck transliterieren - tr ///

Die Schrägstriche dienen jeweils als Trennzeichen für den von Ihnen angegebenen regulären Ausdruck (Regex). Wenn Sie mit einem anderen Trennzeichen vertraut sind, können Sie es anstelle eines Schrägstrichs verwenden.

Der Match-Operator

Der Übereinstimmungsoperator m // wird verwendet, um eine Zeichenfolge oder Anweisung mit einem regulären Ausdruck abzugleichen. Um beispielsweise die Zeichenfolge "foo" mit der skalaren $ -Leiste abzugleichen, können Sie eine Anweisung wie die folgende verwenden:

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ /foo/) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ /foo/) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

First time is matching
Second time is matching

Das m // funktioniert tatsächlich auf die gleiche Weise wie die q // -Operatorreihe. Sie können eine beliebige Kombination von natürlich übereinstimmenden Zeichen verwenden, um als Begrenzer für den Ausdruck zu fungieren. Zum Beispiel sind m {}, m () und m> <alle gültig. Das obige Beispiel kann also wie folgt umgeschrieben werden:

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ m[foo]) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ m{foo}) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Sie können m in m // weglassen, wenn die Trennzeichen Schrägstriche sind. Für alle anderen Trennzeichen müssen Sie jedoch das Präfix m verwenden.

Beachten Sie, dass der gesamte Übereinstimmungsausdruck, dh der Ausdruck links von = ~ oder! ~ Und der Übereinstimmungsoperator, true (in einem skalaren Kontext) zurückgibt, wenn der Ausdruck übereinstimmt. Daher die Aussage -

$true = ($foo =~ m/foo/);

wird eingestellt $true to 1 if $foo entspricht dem regulären Ausdruck oder 0, wenn die Übereinstimmung fehlschlägt. In einem Listenkontext gibt die Übereinstimmung den Inhalt aller gruppierten Ausdrücke zurück. Wenn Sie beispielsweise die Stunden, Minuten und Sekunden aus einer Zeitzeichenfolge extrahieren, können Sie Folgendes verwenden:

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Operator-Modifikatoren abgleichen

Der Übereinstimmungsoperator unterstützt seine eigenen Modifikatoren. Der Modifikator / g ermöglicht eine globale Übereinstimmung. Der Modifikator / i macht die Übereinstimmung zwischen Groß- und Kleinschreibung nicht berücksichtigt. Hier ist die vollständige Liste der Modifikatoren

Sr.Nr. Modifikator & Beschreibung
1

i

Macht den Match Case unempfindlich.

2

m

Gibt an, dass die Operatoren ^ und $ jetzt mit einer Zeilenumbruchgrenze anstelle einer Zeichenfolgengrenze übereinstimmen, wenn die Zeichenfolge Zeilenumbruch- oder Wagenrücklaufzeichen enthält.

3

o

Wertet den Ausdruck nur einmal aus.

4

s

Ermöglicht die Verwendung von. einem Zeilenumbruchzeichen entsprechen.

5

x

Ermöglicht die Verwendung von Leerzeichen im Ausdruck, um die Übersichtlichkeit zu verbessern.

6

g

Findet global alle Übereinstimmungen.

7

cg

Ermöglicht die Fortsetzung der Suche, auch wenn eine globale Übereinstimmung fehlschlägt.

Nur einmal übereinstimmen

Es gibt auch eine einfachere Version des Match-Operators - das? PATTERN? Operator. Dies ist im Grunde identisch mit dem Operator m //, außer dass er innerhalb der Zeichenfolge, die Sie zwischen den einzelnen zurückzusetzenden Aufrufen suchen, nur einmal übereinstimmt.

Sie können dies beispielsweise verwenden, um das erste und das letzte Element in einer Liste abzurufen.

#!/usr/bin/perl

@list = qw/food foosball subeo footnote terfoot canic footbrdige/;

foreach (@list) {
   $first = $1 if /(foo.*?)/; $last = $1 if /(foo.*)/; } print "First: $first, Last: $last\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

First: foo, Last: footbrdige

Variablen für reguläre Ausdrücke

Zu den Variablen für reguläre Ausdrücke gehören $, was auch immer das letzte übereinstimmende Gruppierungsspiel enthält; $&, die die gesamte übereinstimmende Zeichenfolge enthält; $`, die alles vor der übereinstimmenden Zeichenfolge enthält; und$', die alles nach der übereinstimmenden Zeichenfolge enthält. Der folgende Code zeigt das Ergebnis -

#!/usr/bin/perl

$string = "The food is in the salad bar";
$string =~ m/foo/; print "Before: $`\n";
print "Matched: $&\n"; print "After: $'\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Before: The
Matched: foo
After: d is in the salad bar

Der Substitutionsoperator

Der Ersetzungsoperator s /// ist eigentlich nur eine Erweiterung des Übereinstimmungsoperators, mit der Sie den übereinstimmenden Text durch neuen Text ersetzen können. Die Grundform des Operators ist -

s/PATTERN/REPLACEMENT/;

Das MUSTER ist der reguläre Ausdruck für den gesuchten Text. Der ERSATZ ist eine Spezifikation für den Text oder regulären Ausdruck, mit dem der gefundene Text ersetzt werden soll. Zum Beispiel können wir alle Vorkommen von ersetzendog mit cat mit dem folgenden regulären Ausdruck -

#/user/bin/perl

$string = "The cat sat on the mat"; $string =~ s/cat/dog/;

print "$string\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

The dog sat on the mat

Modifikatoren für Substitutionsoperatoren

Hier ist die Liste aller Modifikatoren, die mit dem Substitutionsoperator verwendet werden.

Sr.Nr. Modifikator & Beschreibung
1

i

Macht den Match Case unempfindlich.

2

m

Gibt an, dass die Operatoren ^ und $ jetzt mit einer Zeilenumbruchgrenze anstelle einer Zeichenfolgengrenze übereinstimmen, wenn die Zeichenfolge Zeilenumbruch- oder Wagenrücklaufzeichen enthält.

3

o

Wertet den Ausdruck nur einmal aus.

4

s

Ermöglicht die Verwendung von. einem Zeilenumbruchzeichen entsprechen.

5

x

Ermöglicht die Verwendung von Leerzeichen im Ausdruck, um die Übersichtlichkeit zu verbessern.

6

g

Ersetzt alle Vorkommen des gefundenen Ausdrucks durch den Ersetzungstext.

7

e

Wertet den Ersatz aus, als wäre es eine Perl-Anweisung, und verwendet seinen Rückgabewert als Ersatztext.

Der Übersetzungsoperator

Die Übersetzung ist ähnlich, aber nicht identisch mit den Substitutionsprinzipien, aber im Gegensatz zur Substitution verwendet die Übersetzung (oder Transliteration) keine regulären Ausdrücke für die Suche nach Ersatzwerten. Die Übersetzungsoperatoren sind -

tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

Die Übersetzung ersetzt alle Vorkommen der Zeichen in SEARCHLIST durch die entsprechenden Zeichen in REPLACEMENTLIST. Verwenden Sie zum Beispiel "Die Katze saß auf der Matte". Zeichenfolge, die wir in diesem Kapitel verwendet haben -

#/user/bin/perl

$string = 'The cat sat on the mat'; $string =~ tr/a/o/;

print "$string\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

The cot sot on the mot.

Es können auch Standard-Perl-Bereiche verwendet werden, mit denen Sie Zeichenbereiche entweder nach Buchstaben oder nach numerischen Werten angeben können. Um die Groß- und Kleinschreibung der Zeichenfolge zu ändern, können Sie anstelle von die folgende Syntax verwendenuc Funktion.

$string =~ tr/a-z/A-Z/;

Übersetzungsoperator-Modifikatoren

Im Folgenden finden Sie eine Liste der Operatoren für die Übersetzung.

Sr.Nr. Modifikator & Beschreibung
1

c

Ergänzt die Suchliste.

2

d

Löscht gefundene, aber nicht ersetzte Zeichen.

3

s

Squashes duplizieren ersetzte Zeichen.

Der Modifikator / d löscht die Zeichen, die mit SEARCHLIST übereinstimmen und keinen entsprechenden Eintrag in REPLACEMENTLIST haben. Zum Beispiel -

#!/usr/bin/perl 

$string = 'the cat sat on the mat.'; $string =~ tr/a-z/b/d;

print "$string\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

b b   b.

Der letzte Modifikator / s entfernt die doppelten Zeichenfolgen, die ersetzt wurden.

#!/usr/bin/perl

$string = 'food';
$string = 'food'; $string =~ tr/a-z/a-z/s;

print "$string\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

fod

Komplexere reguläre Ausdrücke

Sie müssen nicht nur auf festen Zeichenfolgen übereinstimmen. Tatsächlich können Sie mit komplexeren regulären Ausdrücken fast alles abgleichen, wovon Sie träumen können. Hier ist ein kurzer Spickzettel -

In der folgenden Tabelle ist die in Python verfügbare Syntax für reguläre Ausdrücke aufgeführt.

Sr.Nr. Muster & Beschreibung
1

^

Entspricht dem Zeilenanfang.

2

$

Entspricht dem Zeilenende.

3

.

Entspricht einem einzelnen Zeichen außer Zeilenumbruch. Mit der Option m kann auch der Zeilenumbruch abgeglichen werden.

4

[...]

Entspricht einem einzelnen Zeichen in Klammern.

5

[^...]

Entspricht einem einzelnen Zeichen, das nicht in Klammern steht.

6

*

Entspricht 0 oder mehr Vorkommen des vorhergehenden Ausdrucks.

7

+

Entspricht 1 oder mehr Vorkommen des vorhergehenden Ausdrucks.

8

?

Entspricht 0 oder 1 Vorkommen des vorhergehenden Ausdrucks.

9

{ n}

Entspricht genau n Vorkommen des vorhergehenden Ausdrucks.

10

{ n,}

Entspricht n oder mehr Vorkommen des vorhergehenden Ausdrucks.

11

{ n, m}

Entspricht mindestens n und höchstens m Vorkommen des vorhergehenden Ausdrucks.

12

a| b

Entspricht entweder a oder b.

13

\w

Entspricht Wortzeichen.

14

\W

Entspricht Nichtwortzeichen.

15

\s

Entspricht dem Leerzeichen. Entspricht [\ t \ n \ r \ f].

16

\S

Entspricht Nicht-Leerzeichen.

17

\d

Entspricht den Ziffern. Entspricht [0-9].

18

\D

Entspricht nicht-stelligen.

19

\A

Entspricht dem Stringanfang.

20

\Z

Entspricht dem Ende der Zeichenfolge. Wenn eine neue Zeile vorhanden ist, stimmt sie kurz vor der neuen Zeile überein.

21

\z

Entspricht dem Ende der Zeichenfolge.

22

\G

Spielpunkt, an dem das letzte Spiel beendet wurde.

23

\b

Entspricht den Wortgrenzen außerhalb der Klammern. Entspricht der Rücktaste (0x08) in Klammern.

24

\B

Entspricht Nichtwortgrenzen.

25

\n, \t, etc.

Entspricht Zeilenumbrüchen, Wagenrückläufen, Tabulatoren usw.

26

\1...\9

Entspricht dem n-ten gruppierten Unterausdruck.

27

\10

Entspricht dem n-ten gruppierten Unterausdruck, wenn er bereits übereinstimmt. Ansonsten bezieht sich auf die oktale Darstellung eines Zeichencodes.

28

[aeiou]

Entspricht einem einzelnen Zeichen im angegebenen Satz

29

[^aeiou]

Entspricht einem einzelnen Zeichen außerhalb des angegebenen Satzes

Das Metazeichen ^ entspricht dem Anfang der Zeichenfolge und das Metasymbol $ entspricht dem Ende der Zeichenfolge. Hier einige kurze Beispiele.

# nothing in the string (start and end are adjacent)
/^$/   

# a three digits, each followed by a whitespace
# character (eg "3 4 5 ")
/(\d\s) {3}/  

# matches a string in which every
# odd-numbered letter is a (eg "abacadaf")
/(a.)+/  

# string starts with one or more digits
/^\d+/

# string that ends with one or more digits
/\d+$/

Schauen wir uns ein anderes Beispiel an.

#!/usr/bin/perl

$string = "Cats go Catatonic\nWhen given Catnip";
($start) = ($string =~ /\A(.*?) /);
@lines = $string =~ /^(.*?) /gm; print "First word: $start\n","Line starts: @lines\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

First word: Cats
Line starts: Cats When

Übereinstimmende Grenzen

Das \bstimmt an jeder Wortgrenze überein, wie durch den Unterschied zwischen der Klasse \ w und der Klasse \ W definiert. Da \ w die Zeichen für ein Wort enthält und \ W das Gegenteil, bedeutet dies normalerweise die Beendigung eines Wortes. Das\BAssertion entspricht jeder Position, die keine Wortgrenze ist. Zum Beispiel -

/\bcat\b/ # Matches 'the cat sat' but not 'cat on the mat'
/\Bcat\B/ # Matches 'verification' but not 'the cat on the mat'
/\bcat\B/ # Matches 'catatonic' but not 'polecat'
/\Bcat\b/ # Matches 'polecat' but not 'catatonic'

Alternativen auswählen

Die | Das Zeichen entspricht dem Standard oder dem bitweisen ODER in Perl. Es gibt alternative Übereinstimmungen innerhalb eines regulären Ausdrucks oder einer Gruppe an. Um beispielsweise "Katze" oder "Hund" in einem Ausdruck zu finden, können Sie Folgendes verwenden:

if ($string =~ /cat|dog/)

Sie können einzelne Elemente eines Ausdrucks zusammenfassen, um komplexe Übereinstimmungen zu unterstützen. Die Suche nach Namen von zwei Personen könnte mit zwei getrennten Tests wie diesem erreicht werden -

if (($string =~ /Martin Brown/) ||  ($string =~ /Sharon Brown/)) This could be written as follows if ($string =~ /(Martin|Sharon) Brown/)

Gruppierung Matching

Unter dem Gesichtspunkt des regulären Ausdrucks gibt es keinen Unterschied, außer vielleicht, dass der erstere etwas klarer ist.

$string =~ /(\S+)\s+(\S+)/; and $string =~ /\S+\s+\S+/;

Der Vorteil der Gruppierung besteht jedoch darin, dass wir eine Sequenz aus einem regulären Ausdruck extrahieren können. Gruppierungen werden als Liste in der Reihenfolge zurückgegeben, in der sie im Original erscheinen. Im folgenden Fragment haben wir beispielsweise die Stunden, Minuten und Sekunden aus einer Zeichenfolge herausgezogen.

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Neben dieser direkten Methode sind übereinstimmende Gruppen auch in den speziellen $ x-Variablen verfügbar, wobei x die Nummer der Gruppe im regulären Ausdruck ist. Wir könnten daher das vorhergehende Beispiel wie folgt umschreiben:

#!/usr/bin/perl

$time = "12:05:30";

$time =~ m/(\d+):(\d+):(\d+)/; my ($hours, $minutes, $seconds) = ($1, $2, $3); print "Hours : $hours, Minutes: $minutes, Second: $seconds\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hours : 12, Minutes: 05, Second: 30

Wenn Gruppen in Substitutionsausdrücken verwendet werden, kann die $ x-Syntax im Ersatztext verwendet werden. Auf diese Weise könnten wir eine Datumszeichenfolge neu formatieren -

#!/usr/bin/perl

$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;

print "$date\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

1999/03/26

Die \ G Behauptung

Mit der Zusicherung \ G können Sie die Suche ab dem Punkt fortsetzen, an dem die letzte Übereinstimmung stattgefunden hat. Im folgenden Code haben wir beispielsweise \ G verwendet, damit wir an der richtigen Position suchen und dann einige Informationen extrahieren können, ohne einen komplexeren, einzelnen regulären Ausdruck erstellen zu müssen.

#!/usr/bin/perl

$string = "The time is: 12:31:02 on 4/12/00";

$string =~ /:\s+/g; ($time) = ($string =~ /\G(\d+:\d+:\d+)/); $string =~ /.+\s+/g;
($date) = ($string =~ m{\G(\d+/\d+/\d+)});

print "Time: $time, Date: $date\n";

Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:

Time: 12:31:02, Date: 4/12/00

Die \ G-Zusicherung ist eigentlich nur das Metasymboläquivalent der pos-Funktion. Zwischen Aufrufen mit regulären Ausdrücken können Sie also weiterhin pos verwenden und sogar den Wert von pos (und damit \ G) ändern, indem Sie pos als lvalue-Subroutine verwenden.

Beispiele für reguläre Ausdrücke

Wörtliche Zeichen

Sr.Nr. Beispiel & Beschreibung
1

Perl

Match "Perl".

Zeichenklassen

Sr.Nr. Beispiel & Beschreibung
1

[Pp]ython

Entspricht "Python" oder "Python"

2

rub[ye]

Entspricht "Rubin" oder "Rube"

3

[aeiou]

Entspricht einem beliebigen Kleinbuchstaben

4

[0-9]

Entspricht einer beliebigen Ziffer. das gleiche wie [0123456789]

5

[a-z]

Entspricht einem beliebigen ASCII-Kleinbuchstaben

6

[A-Z]

Entspricht einem beliebigen ASCII-Großbuchstaben

7

[a-zA-Z0-9]

Entspricht einem der oben genannten Punkte

8

[^aeiou]

Entspricht etwas anderem als einem Kleinbuchstaben

9

[^0-9]

Entspricht etwas anderem als einer Ziffer

Sonderzeichenklassen

Sr.Nr. Beispiel & Beschreibung
1

.

Entspricht jedem Zeichen außer Zeilenumbruch

2

\d

Entspricht einer Ziffer: [0-9]

3

\D

Entspricht einer nichtstelligen Zahl: [^ 0-9]

4

\s

Entspricht einem Leerzeichen: [\ t \ r \ n \ f]

5

\S

Entspricht Nicht-Leerzeichen: [^ \ t \ r \ n \ f]

6

\w

Entspricht einem einzelnen Wortzeichen: [A-Za-z0-9_]

7

\W

Entspricht einem Nichtwortzeichen: [^ A-Za-z0-9_]

Wiederholungsfälle

Sr.Nr. Beispiel & Beschreibung
1

ruby?

Entspricht "rub" oder "ruby": das y ist optional

2

ruby*

Entspricht "reiben" plus 0 oder mehr ys

3

ruby+

Entspricht "reiben" plus 1 oder mehr ys

4

\d{3}

Entspricht genau 3 Ziffern

5

\d{3,}

Entspricht 3 oder mehr Ziffern

6.

\d{3,5}

Entspricht 3, 4 oder 5 Ziffern

Nongreedy Wiederholung

Dies entspricht der geringsten Anzahl von Wiederholungen -

Sr.Nr. Beispiel & Beschreibung
1

<.*>

Gierige Wiederholung: Entspricht "<python> perl>"

2

<.*?>

Nongreedy: Entspricht "<python>" in "<python> perl>"

Gruppieren mit Klammern

Sr.Nr. Beispiel & Beschreibung
1

\D\d+

Keine Gruppe: + wiederholt \ d

2

(\D\d)+

Gruppiert: + wiederholt \ D \ d Paar

3

([Pp]ython(, )?)+

Match "Python", "Python, Python, Python" usw.

Rückreferenzen

Dies entspricht wieder einer zuvor übereinstimmenden Gruppe -

Sr.Nr. Beispiel & Beschreibung
1

([Pp])ython&\1ails

Entspricht Python & Pails oder Python & Pails

2

(['"])[^\1]*\1

Einfache oder doppelte Zeichenfolge. \ 1 stimmt mit der 1. Gruppe überein. \ 2 stimmt mit der 2. Gruppe überein usw.

Alternativen

Sr.Nr. Beispiel & Beschreibung
1

python|perl

Entspricht "Python" oder "Perl"

2

rub(y|le))

Entspricht "Rubin" oder "Rubel"

3

Python(!+|\?)

"Python" gefolgt von einem oder mehreren! oder einer?

Anker

Hier müssen Übereinstimmungspositionen angegeben werden.

Sr.Nr. Beispiel & Beschreibung
1

^Python

Entspricht "Python" am Anfang eines Strings oder einer internen Zeile

2

Python$

Entspricht "Python" am Ende einer Zeichenfolge oder Zeile

3

\APython

Entspricht "Python" am Anfang eines Strings

4

Python\Z

Entspricht "Python" am Ende eines Strings

5

\bPython\b

Entspricht "Python" an einer Wortgrenze

6

\brub\B

\ B ist eine Nichtwortgrenze: Entspricht "rub" in "rube" und "ruby", aber nicht allein

7

Python(?=!)

Entspricht "Python", wenn ein Ausrufezeichen folgt

8

Python(?!!)

Entspricht "Python", wenn kein Ausrufezeichen folgt

Spezielle Syntax mit Klammern

Sr.Nr. Beispiel & Beschreibung
1

R(?#comment)

Entspricht "R". Der Rest ist ein Kommentar

2

R(?i)uby

Groß- und Kleinschreibung wird nicht berücksichtigt, während "uby"

3

R(?i:uby)

Das gleiche wie oben

4

rub(?:y|le))

Nur gruppieren, ohne \ 1 Rückreferenz zu erstellen

Verwenden des sendmail-Dienstprogramms

Senden einer einfachen Nachricht

Wenn Sie auf einem Linux / Unix-Computer arbeiten, können Sie einfach verwenden sendmailDienstprogramm in Ihrem Perl-Programm zum Senden von E-Mails. Hier ist ein Beispielskript, mit dem eine E-Mail an eine bestimmte E-Mail-ID gesendet werden kann. Stellen Sie einfach sicher, dass der angegebene Pfad für das Dienstprogramm sendmail korrekt ist. Dies kann für Ihren Linux / Unix-Computer anders sein.

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

Tatsächlich ist das obige Skript ein Client-E-Mail-Skript, das E-Mails erstellt und an den Server sendet, der lokal auf Ihrem Linux / Unix-Computer ausgeführt wird. Dieses Skript ist nicht für das Senden von E-Mails an das tatsächliche Ziel verantwortlich. Sie müssen also sicherstellen, dass der E-Mail-Server ordnungsgemäß konfiguriert ist und auf Ihrem Computer ausgeführt wird, um E-Mails an die angegebene E-Mail-ID zu senden.

Senden einer HTML-Nachricht

Wenn Sie HTML-formatierte E-Mails mit sendmail senden möchten, müssen Sie nur hinzufügen Content-type: text/html\n im Header-Teil der E-Mail wie folgt -

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
print MAIL "Content-type: text/html\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

Verwenden des MIME :: Lite-Moduls

Wenn Sie auf einem Windows-Computer arbeiten, haben Sie keinen Zugriff auf das Dienstprogramm sendmail. Sie haben jedoch die Möglichkeit, Ihren eigenen E-Mail-Client mit dem MIME: Lite-Perl-Modul zu schreiben. Sie können dieses Modul von MIME-Lite-3.01.tar.gz herunterladen und auf Ihrem Computer Windows oder Linux / Unix installieren. Um es zu installieren, folgen Sie den einfachen Schritten -

$tar xvfz MIME-Lite-3.01.tar.gz
$cd MIME-Lite-3.01 $perl Makefile.PL
$make $make install

Das war's und Sie haben das MIME :: Lite-Modul auf Ihrem Computer installiert. Jetzt können Sie Ihre E-Mail mit einfachen Skripten senden, die unten erläutert werden.

Senden einer einfachen Nachricht

Im Folgenden finden Sie ein Skript, mit dem E-Mails an die angegebene E-Mail-ID gesendet werden.

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->send;
print "Email Sent Successfully\n";

Senden einer HTML-Nachricht

Wenn Sie HTML-formatierte E-Mails mit sendmail senden möchten, müssen Sie nur hinzufügen Content-type: text/html\nim Header-Teil der E-Mail. Im Folgenden finden Sie das Skript, mit dem HTML-formatierte E-Mails gesendet werden.

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->attr("content-type" => "text/html");         
$msg->send;
print "Email Sent Successfully\n";

Anhang senden

Wenn Sie einen Anhang senden möchten, dient das folgende Skript dem Zweck:

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]';
$cc = '[email protected]'; $from = '[email protected]';
$subject = 'Test Email'; $message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new( From => $from,
                 To       => $to, Cc => $cc,
                 Subject  => $subject, Type => 'multipart/mixed' ); # Add your text message. $msg->attach(Type         => 'text',
             Data         => $message ); # Specify your file as attachement. $msg->attach(Type         => 'image/gif',
             Path         => '/tmp/logo.gif',
             Filename     => 'logo.gif',
             Disposition  => 'attachment'
            );       
$msg->send;
print "Email Sent Successfully\n";

Mit der Methode attach () können Sie beliebig viele Dateien in Ihre E-Mail einfügen.

Verwenden des SMTP-Servers

Wenn auf Ihrem Computer kein E-Mail-Server ausgeführt wird, können Sie jeden anderen E-Mail-Server verwenden, der am Remotestandort verfügbar ist. Um jedoch einen anderen E-Mail-Server verwenden zu können, benötigen Sie eine ID, ein Kennwort, eine URL usw. Sobald Sie alle erforderlichen Informationen haben, müssen Sie diese Informationen einfach in angebensend() Methode wie folgt -

$msg->send('smtp', "smtp.myisp.net", AuthUser=>"id", AuthPass=>"password" );

Sie können sich an Ihren E-Mail-Server-Administrator wenden, um die oben genannten Informationen zu erhalten. Wenn eine Benutzer-ID und ein Kennwort noch nicht verfügbar sind, kann Ihr Administrator diese in wenigen Minuten erstellen.

Was ist eine Steckdose?

Socket ist ein Berkeley UNIX-Mechanismus zum Erstellen einer virtuellen Duplexverbindung zwischen verschiedenen Prozessen. Dies wurde später auf jedes bekannte Betriebssystem portiert, um die Kommunikation zwischen Systemen über geografische Standorte hinweg zu ermöglichen, die auf verschiedenen Betriebssystemsoftware ausgeführt werden. Ohne den Socket wäre der größte Teil der Netzwerkkommunikation zwischen Systemen niemals zustande gekommen.

Bei näherer Betrachtung; Ein typisches Computersystem in einem Netzwerk empfängt und sendet Informationen wie gewünscht von den verschiedenen darauf ausgeführten Anwendungen. Diese Informationen werden an das System weitergeleitet, da ihm eine eindeutige IP-Adresse zugewiesen ist. Auf dem System werden diese Informationen an die relevanten Anwendungen weitergegeben, die verschiedene Ports überwachen. Beispielsweise wartet ein Internetbrowser auf Port 80 auf Informationen, die vom Webserver empfangen werden. Wir können auch unsere benutzerdefinierten Anwendungen schreiben, die Informationen zu einer bestimmten Portnummer abhören und senden / empfangen können.

Lassen Sie uns zunächst zusammenfassen, dass ein Socket eine IP-Adresse und ein Port ist, sodass die Verbindung Daten über ein Netzwerk senden und empfangen kann.

Um das oben erwähnte Socket-Konzept zu erläutern, nehmen wir ein Beispiel für die Client-Server-Programmierung mit Perl. Um eine Client-Server-Architektur zu vervollständigen, müssten wir die folgenden Schritte ausführen:

So erstellen Sie einen Server

  • Erstellen Sie einen Socket mit socket Anruf.

  • Binden Sie den Socket mit an eine Portadresse bind Anruf.

  • Hören Sie den Socket an der Portadresse mit ab listen Anruf.

  • Akzeptieren Sie Clientverbindungen mit accept Anruf.

So erstellen Sie einen Client

  • Erstellen Sie einen Socket mit socket Anruf.

  • Verbinden Sie (den Socket) mit dem Server über connect Anruf.

Das folgende Diagramm zeigt die vollständige Abfolge der Aufrufe, mit denen Client und Server miteinander kommunizieren.

Serverseitige Socket-Anrufe

Der Aufruf von socket ()

Das socket()Anruf ist der erste Anruf beim Herstellen einer Netzwerkverbindung, bei dem ein Socket erstellt wird. Dieser Aufruf hat die folgende Syntax:

socket( SOCKET, DOMAIN, TYPE, PROTOCOL );

Der obige Aufruf erstellt ein SOCKET und andere drei Argumente sind Ganzzahlen, die die folgenden Werte für TCP / IP-Verbindungen haben sollten.

  • DOMAINsollte PF_INET sein. Es ist wahrscheinlich 2 auf Ihrem Computer.

  • TYPE sollte SOCK_STREAM für die TCP / IP-Verbindung sein.

  • PROTOCOL sollte sein (getprotobyname('tcp'))[2]. Es ist das spezielle Protokoll wie TCP, das über den Socket gesprochen wird.

Der vom Server ausgegebene Socket-Funktionsaufruf sieht also ungefähr so ​​aus:

use Socket     # This defines PF_INET and SOCK_STREAM

socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);

Der Aufruf von bind ()

Die durch den Aufruf von socket () erstellten Sockets sind unbrauchbar, bis sie an einen Hostnamen und eine Portnummer gebunden sind. Der Server verwendet Folgendesbind() Funktion zur Angabe des Ports, an dem Verbindungen von den Clients akzeptiert werden.

bind( SOCKET, ADDRESS );

Hier ist SOCKET der Deskriptor, der vom Aufruf von socket () zurückgegeben wird, und ADDRESS ist eine Socket-Adresse (für TCP / IP), die drei Elemente enthält:

  • Die Adressfamilie (Für TCP / IP ist das AF_INET, wahrscheinlich 2 auf Ihrem System).

  • Die Portnummer (zum Beispiel 21).

  • Die Internetadresse des Computers (zum Beispiel 10.12.12.168).

Da bind () von einem Server verwendet wird, der keine eigene Adresse kennen muss, sieht die Argumentliste folgendermaßen aus:

use Socket        # This defines PF_INET and SOCK_STREAM

$port = 12345; # The unique port used by the sever to listen requests $server_ip_address = "10.12.12.168";
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address)))
   or die "Can't bind to port $port! \n";

Das or die Die Klausel ist sehr wichtig, da der Port nicht sofort wiederverwendbar ist, wenn ein Server ohne ausstehende Verbindungen ausfällt, es sei denn, Sie verwenden die Option SO_REUSEADDR using setsockopt()Funktion. Hierpack_sockaddr_in() Die Funktion wird verwendet, um den Port und die IP-Adresse in ein Binärformat zu packen.

Der listen () Aufruf

Wenn dies ein Serverprogramm ist, muss ein Aufruf an gesendet werden listen()Warten Sie auf den angegebenen Port, um abzuhören, dh warten Sie auf die eingehenden Anforderungen. Dieser Aufruf hat die folgende Syntax:

listen( SOCKET, QUEUESIZE );

Der obige Aufruf verwendet den Socket-Deskriptor, der vom Socket () -Aufruf zurückgegeben wird, und QUEUESIZE ist die maximale Anzahl ausstehender Verbindungsanforderungen, die gleichzeitig zulässig sind.

Der Aufruf accept ()

Wenn dies ein Serverprogramm ist, muss ein Aufruf an das access()Funktion zum Akzeptieren der eingehenden Verbindungen. Dieser Aufruf hat die folgende Syntax:

accept( NEW_SOCKET, SOCKET );

Der von Socket () -Funktion zurückgegebene SOCKET-Deskriptor für den Empfangsaufruf erhält nach erfolgreichem Abschluss einen neuen Socket-Deskriptor NEW_SOCKET für die gesamte zukünftige Kommunikation zwischen dem Client und dem Server. Wenn der Aufruf von access () fehlschlägt, wird FLASE zurückgegeben, das im Socket-Modul definiert ist, das wir ursprünglich verwendet haben.

Im Allgemeinen wird accept () in einer Endlosschleife verwendet. Sobald eine Verbindung eintrifft, erstellt der Server entweder einen untergeordneten Prozess, um sie zu verarbeiten, oder bedient sie selbst und wartet dann wieder auf weitere Verbindungen.

while(1) {
   accept( NEW_SOCKET, SOCKT );
   .......
}

Jetzt sind alle Anrufe in Bezug auf den Server beendet und wir sehen einen Anruf, der vom Client benötigt wird.

Clientseitige Socket-Anrufe

Der Aufruf von connect ()

Wenn Sie das Client-Programm vorbereiten möchten, verwenden Sie zuerst socket() Rufen Sie an, um einen Socket zu erstellen, und dann müssten Sie verwenden connect()Rufen Sie an, um eine Verbindung zum Server herzustellen. Sie haben bereits die Socket () - Aufrufsyntax gesehen und sie bleibt dem Server-Socket () - Aufruf ähnlich, aber hier ist die Syntax fürconnect() Anruf -

connect( SOCKET, ADDRESS );

Hier ist SCOKET der Socket-Deskriptor, der vom vom Client ausgegebenen Socket () -Aufruf zurückgegeben wird, und ADDRESS ist eine Socket-Adresse, die dem Bindungsaufruf ähnlich ist , außer dass sie die IP-Adresse des Remote-Servers enthält.

$port = 21;    # For example, the ftp port
$server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "Can't connect to port $port! \n";

Wenn Sie erfolgreich eine Verbindung zum Server herstellen, können Sie Ihre Befehle mithilfe des SOCKET-Deskriptors an den Server senden. Andernfalls wird Ihr Client durch eine Fehlermeldung ausgegeben.

Client - Server Beispiel

Es folgt ein Perl-Code zum Implementieren eines einfachen Client-Server-Programms mithilfe des Perl-Sockets. Hier wartet der Server auf eingehende Anfragen und sobald die Verbindung hergestellt ist, antwortet er einfach Smile vom Server . Der Client liest diese Nachricht und druckt sie auf dem Bildschirm aus. Mal sehen, wie es gemacht wurde, vorausgesetzt, wir haben unseren Server und Client auf demselben Computer.

Skript zum Erstellen eines Servers

#!/usr/bin/perl -w
# Filename : server.pl

use strict;
use Socket;

# use port 7890 as default
my $port = shift || 7890; my $proto = getprotobyname('tcp');
my $server = "localhost"; # Host IP running the server # create a socket, make it reusable socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
   or die "Can't open socket $!\n"; setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set socket option to SO_REUSEADDR $!\n";

# bind to a port, then listen
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server)))
   or die "Can't bind to port $port! \n"; listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n"; # accepting a connection my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) { # send them a message, close connection my $name = gethostbyaddr($client_addr, AF_INET ); print NEW_SOCKET "Smile from the server"; print "Connection recieved from $name\n";
   close NEW_SOCKET;
}

Um den Server im Hintergrundmodus auszuführen, geben Sie an der Unix-Eingabeaufforderung den folgenden Befehl ein:

$perl sever.pl&

Skript zum Erstellen eines Clients

!/usr/bin/perl -w
# Filename : client.pl

use strict;
use Socket;

# initialize host and port
my $host = shift || 'localhost';
my $port = shift || 7890; my $server = "localhost";  # Host IP running the server

# create the socket, connect to the port
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2])
   or die "Can't create a socket $!\n"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server))) or die "Can't connect to port $port! \n";

my $line; while ($line = <SOCKET>) {
   print "$line\n"; } close SOCKET or die "close: $!";

Starten wir nun unseren Client an der Eingabeaufforderung, die eine Verbindung zum Server herstellt und die vom Server gesendete Nachricht liest und diese auf dem Bildschirm wie folgt anzeigt:

$perl client.pl
Smile from the server

NOTE - Wenn Sie die tatsächliche IP-Adresse in Punktnotation angeben, wird empfohlen, die IP-Adresse sowohl auf dem Client als auch auf dem Server im gleichen Format anzugeben, um Verwechslungen zu vermeiden.

Wir haben bereits Referenzen in anonymen Perl- und Perl-Arrays und -Hashes untersucht. Das objektorientierte Konzept in Perl basiert stark auf Referenzen und anonymen Arrays und Hashes. Beginnen wir mit dem Erlernen grundlegender Konzepte von objektorientiertem Perl.

Objektgrundlagen

Es gibt drei Hauptbegriffe, die unter dem Gesichtspunkt erläutert werden, wie Perl mit Objekten umgeht. Die Begriffe sind Objekt, Klasse und Methode.

  • Ein objectIn Perl wird lediglich auf einen Datentyp verwiesen, der weiß, zu welcher Klasse er gehört. Das Objekt wird als Referenz in einer skalaren Variablen gespeichert. Da ein Skalar nur einen Verweis auf das Objekt enthält, kann derselbe Skalar verschiedene Objekte in verschiedenen Klassen enthalten.

  • EIN class In Perl befindet sich ein Paket, das die entsprechenden Methoden zum Erstellen und Bearbeiten von Objekten enthält.

  • EIN methodInnerhalb von Perl befindet sich eine Unterroutine, die mit dem Paket definiert wird. Das erste Argument für die Methode ist eine Objektreferenz oder ein Paketname, je nachdem, ob die Methode das aktuelle Objekt oder die Klasse beeinflusst.

Perl bietet eine bless() Funktion, mit der eine Referenz zurückgegeben wird, die letztendlich zu einem Objekt wird.

Eine Klasse definieren

Es ist sehr einfach, eine Klasse in Perl zu definieren. Eine Klasse entspricht einem Perl-Paket in seiner einfachsten Form. Um eine Klasse in Perl zu erstellen, erstellen wir zuerst ein Paket.

Ein Paket ist eine in sich geschlossene Einheit von benutzerdefinierten Variablen und Unterprogrammen, die immer wieder verwendet werden können.

Perl-Pakete bieten einen separaten Namespace innerhalb eines Perl-Programms, der Unterprogramme und Variablen unabhängig von Konflikten mit denen in anderen Paketen hält.

Um eine Klasse namens Person in Perl zu deklarieren, tun wir -

package Person;

Der Umfang der Paketdefinition erstreckt sich bis zum Ende der Datei oder bis ein anderes Paketschlüsselwort gefunden wird.

Objekte erstellen und verwenden

Um eine Instanz einer Klasse (eines Objekts) zu erstellen, benötigen wir einen Objektkonstruktor. Dieser Konstruktor ist eine im Paket definierte Methode. Die meisten Programmierer benennen diese Objektkonstruktormethode neu, aber in Perl können Sie einen beliebigen Namen verwenden.

Sie können jede Art von Perl-Variable als Objekt in Perl verwenden. Die meisten Perl-Programmierer wählen entweder Verweise auf Arrays oder Hashes.

Lassen Sie uns unseren Konstruktor für unsere Person-Klasse mithilfe einer Perl-Hash-Referenz erstellen. Beim Erstellen eines Objekts müssen Sie einen Konstruktor angeben, bei dem es sich um eine Unterroutine innerhalb eines Pakets handelt, die eine Objektreferenz zurückgibt. Die Objektreferenz wird erstellt, indem eine Referenz auf die Klasse des Pakets gesegnet wird. Zum Beispiel -

package Person;
sub new {
   my $class = shift;
   my $self = { _firstName => shift, _lastName => shift, _ssn => shift, }; # Print all the values just for clarification. print "First Name is $self->{_firstName}\n";
   print "Last Name is $self->{_lastName}\n"; print "SSN is $self->{_ssn}\n";
   bless $self, $class;
   return $self;
}

Lassen Sie uns nun sehen, wie Sie ein Objekt erstellen.

$object = new Person( "Mohammad", "Saleem", 23234345);

Sie können einfachen Hash in Ihrem Konstruktor verwenden, wenn Sie keiner Klassenvariablen einen Wert zuweisen möchten. Zum Beispiel -

package Person;
sub new {
   my $class = shift; my $self = {};
   bless $self, $class;
   return $self;
}

Methoden definieren

Andere objektorientierte Sprachen haben das Konzept der Datensicherheit, um zu verhindern, dass ein Programmierer Objektdaten direkt ändert, und sie bieten Zugriffsmethoden zum Ändern von Objektdaten. Perl hat keine privaten Variablen, aber wir können immer noch das Konzept der Hilfsmethoden verwenden, um Objektdaten zu manipulieren.

Definieren wir eine Hilfsmethode, um den Vornamen einer Person zu erhalten.

sub getFirstName {
   return $self->{_firstName};
}

Eine weitere Hilfsfunktion zum Festlegen des Vornamens einer Person -

sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

Schauen wir uns nun ein vollständiges Beispiel an: Behalten Sie das Personenpaket und die Hilfsfunktionen in der Person.pm-Datei.

#!/usr/bin/perl 

package Person;

sub new {
   my $class = shift; my $self = {
      _firstName => shift,
      _lastName  => shift,
      _ssn       => shift,
   };
   # Print all the values just for clarification.
   print "First Name is $self->{_firstName}\n"; print "Last Name is $self->{_lastName}\n";
   print "SSN is $self->{_ssn}\n"; bless $self, $class; return $self;
}
sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

sub getFirstName {
   my( $self ) = @_; return $self->{_firstName};
}
1;

Verwenden wir nun das Objekt Person in der Datei employee.pl wie folgt:

#!/usr/bin/perl

use Person;

$object = new Person( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

Wenn wir das obige Programm ausführen, wird das folgende Ergebnis erzeugt:

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Erbe

Objektorientierte Programmierung hat ein sehr gutes und nützliches Konzept, das als Vererbung bezeichnet wird. Vererbung bedeutet einfach, dass Eigenschaften und Methoden einer übergeordneten Klasse den untergeordneten Klassen zur Verfügung stehen. Sie müssen also nicht immer wieder denselben Code schreiben, sondern können einfach eine übergeordnete Klasse erben.

Zum Beispiel können wir eine Klasse Employee haben, die von Person erbt. Dies wird als "isa" -Beziehung bezeichnet, da ein Mitarbeiter eine Person ist. Perl hat eine spezielle Variable, @ISA, um dabei zu helfen. @ISA regelt die (Methoden-) Vererbung.

Im Folgenden sind die wichtigen Punkte aufgeführt, die bei der Verwendung der Vererbung zu beachten sind:

  • Perl durchsucht die Klasse des angegebenen Objekts nach der angegebenen Methode oder dem angegebenen Attribut, dh nach der Variablen.

  • Perl durchsucht die im @ ISO-Array der Objektklasse definierten Klassen.

  • Wenn in Schritt 1 oder 2 keine Methode gefunden wird, verwendet Perl eine AUTOLOAD-Unterroutine, sofern eine im @ISA-Baum gefunden wird.

  • Wenn eine passende Methode immer noch nicht gefunden werden kann, sucht Perl nach der Methode in der UNIVERSAL-Klasse (Paket), die Teil der Standard-Perl-Bibliothek ist.

  • Wenn die Methode immer noch nicht gefunden wurde, gibt Perl auf und löst eine Laufzeitausnahme aus.

Um eine neue Employee-Klasse zu erstellen, die Methoden und Attribute von unserer Person-Klasse erbt, codieren wir einfach wie folgt: Behalten Sie diesen Code in Employee.pm bei.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

Jetzt verfügt die Mitarbeiterklasse über alle Methoden und Attribute, die von der Personenklasse geerbt wurden, und Sie können sie wie folgt verwenden: Verwenden Sie die Datei main.pl, um sie zu testen -

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "After Setting First Name is : $firstName\n";

Wenn wir das obige Programm ausführen, wird das folgende Ergebnis erzeugt:

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Überschreiben der Methode

Die untergeordnete Klasse Employee erbt alle Methoden von der übergeordneten Klasse Person. Wenn Sie diese Methoden in Ihrer untergeordneten Klasse überschreiben möchten, können Sie dies tun, indem Sie Ihre eigene Implementierung angeben. Sie können Ihre zusätzlichen Funktionen in der untergeordneten Klasse hinzufügen oder die Funktionalität einer vorhandenen Methode in der übergeordneten Klasse hinzufügen oder ändern. Dies kann wie folgt erfolgen: Ändern Sie die Datei Employee.pm.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

# Override constructor
sub new {
   my ($class) = @_; # Call the constructor of the parent class, Person. my $self = $class->SUPER::new( $_[1], $_[2], $_[3] );
   # Add few more attributes
   $self->{_id} = undef; $self->{_title} = undef;
   bless $self, $class;
   return $self; } # Override helper function sub getFirstName { my( $self ) = @_;
   # This is child class function.
   print "This is child class helper function\n";
   return $self->{_firstName}; } # Add more methods sub setLastName{ my ( $self, $lastName ) = @_; $self->{_lastName} = $lastName if defined($lastName);
   return $self->{_lastName}; } sub getLastName { my( $self ) = @_;
   return $self->{_lastName};
}

1;

Versuchen wir nun erneut, das Employee-Objekt in unserer Datei main.pl zu verwenden und auszuführen.

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345);
# Get first name which is set using constructor.
$firstName = $object->getFirstName();

print "Before Setting First Name is : $firstName\n"; # Now Set first name using helper function. $object->setFirstName( "Mohd." );

# Now get first name set by helper function.
$firstName = $object->getFirstName();
print "After Setting First Name is : $firstName\n";

Wenn wir das obige Programm ausführen, wird das folgende Ergebnis erzeugt:

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
This is child class helper function
Before Setting First Name is : Mohammad
This is child class helper function
After Setting First Name is : Mohd.

Standard-Autoloading

Perl bietet eine Funktion, die Sie in keiner anderen Programmiersprache finden würden: eine Standard-Unterroutine. Das heißt, wenn Sie eine aufgerufene Funktion definierenAUTOLOAD(),Alle Aufrufe undefinierter Unterprogramme rufen dann automatisch die Funktion AUTOLOAD () auf. Der Name der fehlenden Unterroutine ist in dieser Unterroutine als $ AUTOLOAD verfügbar.

Die Standardfunktion zum automatischen Laden ist sehr nützlich für die Fehlerbehandlung. Hier ist ein Beispiel für die Implementierung von AUTOLOAD. Sie können diese Funktion auf Ihre eigene Weise implementieren.

sub AUTOLOAD {
   my $self = shift; my $type = ref ($self) || croak "$self is not an object";
   my $field = $AUTOLOAD;
   $field =~ s/.*://; unless (exists $self->{$field}) { croak "$field does not exist in object/class $type"; } if (@_) { return $self->($name) = shift; } else { return $self->($name);
   }
}

Zerstörer und Müllabfuhr

Wenn Sie zuvor mit objektorientierter Programmierung programmiert haben, sind Sie sich der Notwendigkeit bewusst, eine zu erstellen destructorum den dem Objekt zugewiesenen Speicher freizugeben, wenn Sie es nicht mehr verwenden. Perl erledigt dies automatisch für Sie, sobald das Objekt den Gültigkeitsbereich verlässt.

Wenn Sie Ihren Destruktor implementieren möchten, der sich um das Schließen von Dateien oder eine zusätzliche Verarbeitung kümmern soll, müssen Sie eine spezielle Methode mit dem Namen definieren DESTROY. Diese Methode wird für das Objekt aufgerufen, kurz bevor Perl den ihm zugewiesenen Speicher freigibt. Im Übrigen ist die DESTROY-Methode wie jede andere Methode, und Sie können jede gewünschte Logik in diese Methode implementieren.

Eine Destruktormethode ist einfach eine Elementfunktion (Unterroutine) namens DESTROY, die in den folgenden Fällen automatisch aufgerufen wird:

  • Wenn die Variable der Objektreferenz den Gültigkeitsbereich verlässt.
  • Wenn die Variable der Objektreferenz nicht definiert ist.
  • Wenn das Skript beendet wird
  • Wenn der Perl-Interpreter beendet wird

Zum Beispiel können Sie einfach die folgende Methode DESTROY in Ihre Klasse einfügen:

package MyClass;
...
sub DESTROY {
   print "MyClass::DESTROY called\n";
}

Objektorientiertes Perl-Beispiel

Hier ist ein weiteres schönes Beispiel, das Ihnen hilft, objektorientierte Konzepte von Perl zu verstehen. Fügen Sie diesen Quellcode in eine beliebige Perl-Datei ein und führen Sie ihn aus.

#!/usr/bin/perl

# Following is the implementation of simple Class.
package MyClass;

sub new {
   print "MyClass::new called\n";
   my $type = shift;            # The package/type name
   my $self = {}; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MyClass::DESTROY called\n"; } sub MyMethod { print "MyClass::MyMethod called!\n"; } # Following is the implemnetation of Inheritance. package MySubClass; @ISA = qw( MyClass ); sub new { print "MySubClass::new called\n"; my $type = shift;            # The package/type name
   my $self = MyClass->new; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MySubClass::DESTROY called\n"; } sub MyMethod { my $self = shift;
   $self->SUPER::MyMethod(); print " MySubClass::MyMethod called!\n"; } # Here is the main program using above classes. package main; print "Invoke MyClass method\n"; $myObject = MyClass->new();
$myObject->MyMethod(); print "Invoke MySubClass method\n"; $myObject2 = MySubClass->new();
$myObject2->MyMethod(); print "Create a scoped object\n"; { my $myObject2 = MyClass->new();
}
# Destructor is called automatically here

print "Create and undef an object\n";
$myObject3 = MyClass->new(); undef $myObject3;

print "Fall off the end of the script...\n";
# Remaining destructors are called automatically here

Wenn wir das obige Programm ausführen, wird das folgende Ergebnis erzeugt:

Invoke MyClass method
MyClass::new called
MyClass::MyMethod called!
Invoke MySubClass method
MySubClass::new called
MyClass::new called
MyClass::MyMethod called!
MySubClass::MyMethod called!
Create a scoped object
MyClass::new called
MyClass::DESTROY called
Create and undef an object
MyClass::new called
MyClass::DESTROY called
Fall off the end of the script...
MyClass::DESTROY called
MySubClass::DESTROY called

In diesem Kapitel erfahren Sie, wie Sie in Ihrem Perl-Skript auf eine Datenbank zugreifen. Ab Perl 5 ist es sehr einfach geworden, Datenbankanwendungen mit zu schreibenDBIModul. DBI steht fürDatabase Independent Interface Für Perl bedeutet dies, dass DBI eine Abstraktionsschicht zwischen dem Perl-Code und der zugrunde liegenden Datenbank bereitstellt, sodass Sie die Datenbankimplementierungen ganz einfach wechseln können.

Das DBI ist ein Datenbankzugriffsmodul für die Programmiersprache Perl. Es bietet eine Reihe von Methoden, Variablen und Konventionen, die unabhängig von der tatsächlich verwendeten Datenbank eine konsistente Datenbankschnittstelle bieten.

Architektur einer DBI-Anwendung

DBI ist unabhängig von jeder im Backend verfügbaren Datenbank. Sie können DBI verwenden, unabhängig davon, ob Sie mit Oracle, MySQL oder Informix usw. arbeiten. Dies geht aus dem folgenden Architekturdiagramm hervor.

Hier ist DBI dafür verantwortlich, alle SQL-Befehle über die API (dh die Anwendungsprogrammierschnittstelle) zu führen und sie zur tatsächlichen Ausführung an den entsprechenden Treiber zu senden. Und schließlich ist DBI dafür verantwortlich, die Ergebnisse vom Fahrer zu übernehmen und an den anrufenden Scritp zurückzugeben.

Notation und Konventionen

In diesem Kapitel werden die folgenden Notationen verwendet, und es wird empfohlen, dass Sie dieselbe Konvention befolgen.

$dsn Database source name $dbh    Database handle object
$sth Statement handle object $h      Any of the handle types above ($dbh, $sth, or $drh) $rc     General Return Code  (boolean: true=ok, false=error)
$rv General Return Value (typically an integer) @ary List of values returned from the database. $rows   Number of rows processed (if available, else -1)
$fh     A filehandle
undef   NULL values are represented by undefined values in Perl
\%attr  Reference to a hash of attribute values passed to methods

Datenbankverbindung

Angenommen, wir werden mit der MySQL-Datenbank arbeiten. Stellen Sie vor dem Herstellen einer Verbindung zu einer Datenbank Folgendes sicher. Sie können unser MySQL-Tutorial nutzen, falls Sie nicht wissen, wie Sie Datenbanken und Tabellen in der MySQL-Datenbank erstellen.

  • Sie haben eine Datenbank mit dem Namen TESTDB erstellt.

  • Sie haben in TESTDB eine Tabelle mit dem Namen TEST_TABLE erstellt.

  • Diese Tabelle enthält die Felder FIRST_NAME, LAST_NAME, AGE, SEX und INCOME.

  • Die Benutzer-ID "testuser" und das Kennwort "test123" sind für den Zugriff auf TESTDB festgelegt.

  • Perl Module DBI ist ordnungsgemäß auf Ihrem Computer installiert.

  • Sie haben das MySQL-Tutorial durchgearbeitet, um die MySQL-Grundlagen zu verstehen.

Es folgt das Beispiel für die Verbindung mit der MySQL-Datenbank "TESTDB" -

#!/usr/bin/perl

use DBI
use strict;

my $driver = "mysql"; 
my $database = "TESTDB"; my $dsn = "DBI:$driver:database=$database";
my $userid = "testuser"; my $password = "test123";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;

Wenn eine Verbindung mit der Datenquelle hergestellt wird, wird ein Datenbankhandle zurückgegeben und zur weiteren Verwendung in $ dbh gespeichert. Andernfalls wird $ dbh auf den Wert undef gesetzt und $ DBI :: errstr gibt eine Fehlerzeichenfolge zurück.

INSERT-Betrieb

Die INSERT-Operation ist erforderlich, wenn Sie einige Datensätze in einer Tabelle erstellen möchten. Hier verwenden wir die Tabelle TEST_TABLE, um unsere Datensätze zu erstellen. Sobald unsere Datenbankverbindung hergestellt ist, können wir Datensätze in TEST_TABLE erstellen. Im Folgenden wird beschrieben, wie Sie einen einzelnen Datensatz in TEST_TABLE erstellen. Mit demselben Konzept können Sie beliebig viele Datensätze erstellen.

Die Datensatzerstellung umfasst die folgenden Schritte:

  • SQL-Anweisung mit INSERT-Anweisung vorbereiten. Dies erfolgt mitprepare() API.

  • Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mitexecute() API.

  • Stattement-Griff loslassen. Dies erfolgt mitfinish() API.

  • Wenn alles gut geht, dann commit diese Operation können Sie sonst rollbackTransaktion abschließen. Commit und Rollback werden in den nächsten Abschnitten erläutert.

my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                       (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                         values
                       ('john', 'poul', 'M', 30, 13000)");
$sth->execute() or die $DBI::errstr;
$sth->finish(); $dbh->commit or die $DBI::errstr;

Bindungswerte verwenden

Es kann vorkommen, dass die einzugebenden Werte nicht im Voraus angegeben werden. Sie können also Bindevariablen verwenden, die zur Laufzeit die erforderlichen Werte annehmen. Perl-DBI-Module verwenden anstelle des tatsächlichen Werts ein Fragezeichen, und dann werden die tatsächlichen Werte zur Laufzeit über die execute () -API übergeben. Es folgt das Beispiel -

my $first_name = "john";
my $last_name = "poul"; my $sex = "M";
my $income = 13000; my $age = 30;
my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                        (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                          values
                        (?,?,?,?)");
$sth->execute($first_name,$last_name,$sex, $age, $income) 
          or die $DBI::errstr; $sth->finish();
$dbh->commit or die $DBI::errstr;

LESEN Betrieb

READ Operation für eine beliebige Datenbank bedeutet, dass einige nützliche Informationen aus der Datenbank abgerufen werden, dh ein oder mehrere Datensätze aus einer oder mehreren Tabellen. Sobald unsere Datenbankverbindung hergestellt ist, können wir eine Abfrage in diese Datenbank durchführen. Im Folgenden wird beschrieben, wie alle Datensätze mit einem Alter von mehr als 20 Jahren abgefragt werden. Dies umfasst vier Schritte:

  • Vorbereiten der SQL SELECT-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mitprepare() API.

  • Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mitexecute() API.

  • Abrufen aller Ergebnisse nacheinander und Drucken dieser Ergebnisse. Dies erfolgt mit fetchrow_array() API.

  • Stattement-Griff loslassen. Dies erfolgt mitfinish() API.

my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE 
                        WHERE AGE > 20");
$sth->execute() or die $DBI::errstr;
print "Number of rows found :" + $sth->rows; while (my @row = $sth->fetchrow_array()) {
   my ($first_name, $last_name ) = @row;
   print "First Name = $first_name, Last Name = $last_name\n";
}
$sth->finish();

Bindungswerte verwenden

Es kann vorkommen, dass die Bedingung nicht im Voraus gegeben wird. Sie können also Bindevariablen verwenden, die zur Laufzeit die erforderlichen Werte annehmen. Perl-DBI-Module verwenden anstelle des tatsächlichen Werts ein Fragezeichen. Anschließend werden die tatsächlichen Werte zur Laufzeit über die API execute () übergeben. Es folgt das Beispiel -

$age = 20;
my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE
                        WHERE AGE > ?");
$sth->execute( $age ) or die $DBI::errstr; print "Number of rows found :" + $sth->rows;
while (my @row = $sth->fetchrow_array()) { my ($first_name, $last_name ) = @row; print "First Name = $first_name, Last Name = $last_name\n"; } $sth->finish();

UPDATE-Betrieb

UPDATE Operation für eine beliebige Datenbank bedeutet, einen oder mehrere Datensätze zu aktualisieren, die bereits in den Datenbanktabellen verfügbar sind. Im Folgenden wird beschrieben, wie Sie alle Datensätze mit SEX als 'M' aktualisieren. Hier werden wir das ALTER aller Männchen um ein Jahr erhöhen. Dies dauert drei Schritte -

  • Vorbereiten der SQL-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mitprepare() API.

  • Ausführen einer SQL-Abfrage, um alle Ergebnisse aus der Datenbank auszuwählen. Dies erfolgt mitexecute() API.

  • Stattement-Griff loslassen. Dies erfolgt mitfinish() API.

  • Wenn alles gut geht, dann commit diese Operation können Sie sonst rollbackTransaktion abschließen. Im nächsten Abschnitt finden Sie Commit- und Rollback-APIs.

my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   AGE = AGE + 1 
                        WHERE SEX = 'M'");
$sth->execute() or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Bindungswerte verwenden

Es kann vorkommen, dass die Bedingung nicht im Voraus gegeben wird. Sie können also Bindevariablen verwenden, die zur Laufzeit die erforderlichen Werte annehmen. Perl-DBI-Module verwenden anstelle des tatsächlichen Werts ein Fragezeichen. Anschließend werden die tatsächlichen Werte zur Laufzeit über die API execute () übergeben. Es folgt das Beispiel -

$sex = 'M'; my $sth = $dbh->prepare("UPDATE TEST_TABLE SET AGE = AGE + 1 WHERE SEX = ?"); $sth->execute('$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

In einigen Fällen möchten Sie einen Wert festlegen, der nicht im Voraus angegeben wird, damit Sie den verbindlichen Wert wie folgt verwenden können. In diesem Beispiel wird das Einkommen aller Männer auf 10000 festgelegt.

$sex = 'M'; $income = 10000;
my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   INCOME = ?
                        WHERE SEX = ?");
$sth->execute( $income, '$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();

DELETE-Betrieb

Der Vorgang LÖSCHEN ist erforderlich, wenn Sie einige Datensätze aus Ihrer Datenbank löschen möchten. Im Folgenden wird beschrieben, wie Sie alle Datensätze aus TEST_TABLE löschen, wobei AGE gleich 30 ist. Dieser Vorgang führt die folgenden Schritte aus.

  • Vorbereiten der SQL-Abfrage basierend auf den erforderlichen Bedingungen. Dies erfolgt mitprepare() API.

  • Ausführen einer SQL-Abfrage zum Löschen der erforderlichen Datensätze aus der Datenbank. Dies erfolgt mitexecute() API.

  • Stattement-Griff loslassen. Dies erfolgt mitfinish() API.

  • Wenn alles gut geht, dann commit diese Operation können Sie sonst rollback Transaktion abschließen.

$age = 30; my $sth = $dbh->prepare("DELETE FROM TEST_TABLE WHERE AGE = ?"); $sth->execute( $age ) or die $DBI::errstr;
print "Number of rows deleted :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Do-Anweisung verwenden

Wenn Sie UPDATE, INSERT oder DELETE ausführen, werden keine Daten aus der Datenbank zurückgegeben. Daher gibt es eine Verknüpfung, um diesen Vorgang auszuführen. Sie können verwendendo Anweisung, um einen der Befehle wie folgt auszuführen.

$dbh->do('DELETE FROM TEST_TABLE WHERE age =30');

doGibt einen wahren Wert zurück, wenn dies erfolgreich war, und einen falschen Wert, wenn dies fehlgeschlagen ist. Wenn dies erfolgreich ist, wird die Anzahl der betroffenen Zeilen zurückgegeben. Im Beispiel wird die Anzahl der tatsächlich gelöschten Zeilen zurückgegeben.

COMMIT-Betrieb

Commit ist die Operation, die der Datenbank ein grünes Signal gibt, um die Änderungen abzuschließen. Nach dieser Operation kann keine Änderung mehr in ihre ursprüngliche Position zurückgesetzt werden.

Hier ist ein einfaches Beispiel zum Aufrufen commit API.

$dbh->commit or die $dbh->errstr;

ROLLBACK-Betrieb

Wenn Sie mit allen Änderungen nicht zufrieden sind oder zwischen den Vorgängen ein Fehler auftritt, können Sie diese Änderungen auf die Verwendung zurücksetzen rollback API.

Hier ist ein einfaches Beispiel zum Aufrufen rollback API.

$dbh->rollback or die $dbh->errstr;

Transaktion starten

Viele Datenbanken unterstützen Transaktionen. Dies bedeutet, dass Sie eine ganze Reihe von Abfragen durchführen können, die die Datenbanken ändern würden, aber keine der Änderungen tatsächlich vorgenommen wird. Am Ende geben Sie dann die spezielle SQL-Abfrage ausCOMMITund alle Änderungen werden gleichzeitig vorgenommen. Alternativ können Sie die Abfrage ROLLBACK ausgeben. In diesem Fall werden alle Änderungen verworfen und die Datenbank bleibt unverändert.

Perl DBI-Modul zur Verfügung gestellt begin_workAPI, die Transaktionen (durch Deaktivieren von AutoCommit) bis zum nächsten Aufruf zum Festschreiben oder Zurücksetzen ermöglicht. Nach dem nächsten Commit oder Rollback wird AutoCommit automatisch wieder aktiviert.

$rc  = $dbh->begin_work or die $dbh->errstr;

AutoCommit-Option

Wenn Ihre Transaktionen einfach sind, können Sie sich die Mühe ersparen, viele Commits ausführen zu müssen. Wenn Sie den Verbindungsaufruf tätigen, können Sie eine angebenAutoCommitOption, die nach jeder erfolgreichen Abfrage einen automatischen Festschreibungsvorgang ausführt. So sieht es aus -

my $dbh = DBI->connect($dsn, $userid, $password,
              {AutoCommit => 1}) 
              or die $DBI::errstr;

Hier kann AutoCommit den Wert 1 oder 0 annehmen, wobei 1 bedeutet, dass AutoCommit aktiviert ist und 0 bedeutet, dass AutoCommit deaktiviert ist.

Automatische Fehlerbehandlung

Wenn Sie den Verbindungsaufruf tätigen, können Sie eine RaiseErrors-Option angeben, die Fehler automatisch für Sie behandelt. Wenn ein Fehler auftritt, bricht DBI Ihr Programm ab, anstatt einen Fehlercode zurückzugeben. Wenn Sie das Programm nur aufgrund eines Fehlers abbrechen möchten, kann dies praktisch sein. So sieht es aus -

my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1}) or die $DBI::errstr;

Hier kann RaiseError den Wert 1 oder 0 annehmen.

Datenbank trennen

Verwenden Sie zum Trennen der Datenbankverbindung disconnect API wie folgt -

$rc = $dbh->disconnect  or warn $dbh->errstr;

Das Transaktionsverhalten der Trennungsmethode ist leider undefiniert. Einige Datenbanksysteme (wie Oracle und Ingres) übernehmen automatisch alle ausstehenden Änderungen, andere (wie Informix) setzen alle ausstehenden Änderungen zurück. Anwendungen, die AutoCommit nicht verwenden, sollten Commit oder Rollback explizit aufrufen, bevor sie Disconnect aufrufen.

Verwenden von NULL-Werten

Undefinierte Werte oder undef werden verwendet, um NULL-Werte anzugeben. Sie können Spalten mit einem NULL-Wert wie einen Nicht-NULL-Wert einfügen und aktualisieren. In diesen Beispielen wird das Spaltenalter eingefügt und mit einem NULL-Wert aktualisiert.

$sth = $dbh->prepare(qq { INSERT INTO TEST_TABLE (FIRST_NAME, AGE) VALUES (?, ?) }); $sth->execute("Joe", undef);

Hier qq{} wird verwendet, um eine Zeichenfolge in Anführungszeichen zurückzugeben prepareAPI. Bei der Verwendung von NULL-Werten in einer WHERE-Klausel ist jedoch Vorsicht geboten. Betrachten Sie -

SELECT FIRST_NAME FROM TEST_TABLE WHERE age = ?

Durch das Binden eines undef (NULL) an den Platzhalter werden keine Zeilen ausgewählt, die ein NULL-Alter haben! Zumindest für Datenbankmodule, die dem SQL-Standard entsprechen. Die Gründe hierfür finden Sie im SQL-Handbuch für Ihre Datenbank-Engine oder in einem SQL-Buch. Um NULL explizit auszuwählen, müssen Sie "WHERE age IS NULL" sagen.

Ein häufiges Problem besteht darin, dass ein Codefragment zur Laufzeit einen Wert verarbeitet, der entweder definiert oder undef (nicht NULL oder NULL) sein kann. Eine einfache Technik besteht darin, die entsprechende Anweisung nach Bedarf vorzubereiten und Nicht-NULL-Fälle durch den Platzhalter zu ersetzen.

$sql_clause = defined $age? "age = ?" : "age IS NULL";
$sth = $dbh->prepare(qq {
         SELECT FIRST_NAME FROM TEST_TABLE WHERE $sql_clause }); $sth->execute(defined $age ? $age : ());

Einige andere DBI-Funktionen

verfügbare_Treiber

@ary = DBI->available_drivers;
@ary = DBI->available_drivers($quiet);

Gibt eine Liste aller verfügbaren Treiber zurück, indem in den Verzeichnissen in @INC nach DBD :: * -Modulen gesucht wird. Standardmäßig wird eine Warnung ausgegeben, wenn einige Treiber in früheren Verzeichnissen von anderen mit demselben Namen ausgeblendet werden. Wenn Sie einen wahren Wert für $ quiet übergeben, wird die Warnung deaktiviert.

installierte_Treiber

%drivers = DBI->installed_drivers();

Gibt eine Liste von Treibernamen- und Treiberhandle-Paaren für alle im aktuellen Prozess 'installierten' (geladenen) Treiber zurück. Der Treibername enthält nicht das Präfix 'DBD ::'.

Datenquellen

@ary = DBI->data_sources($driver);

Gibt eine Liste der Datenquellen (Datenbanken) zurück, die über den genannten Treiber verfügbar sind. Wenn $ driver leer oder undef ist, wird der Wert der Umgebungsvariablen DBI_DRIVER verwendet.

Zitat

$sql = $dbh->quote($value); $sql = $dbh->quote($value, $data_type);

Zitieren Sie ein Zeichenfolgenliteral zur Verwendung als Literalwert in einer SQL-Anweisung, indem Sie alle in der Zeichenfolge enthaltenen Sonderzeichen (z. B. Anführungszeichen) maskieren und den erforderlichen Typ der äußeren Anführungszeichen hinzufügen.

$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
                $dbh->quote("Don't");

Bei den meisten Datenbanktypen würde das Anführungszeichen "Nicht" (einschließlich der äußeren Anführungszeichen) zurückgeben. Es ist gültig, dass die quote () -Methode einen SQL-Ausdruck zurückgibt, der die gewünschte Zeichenfolge ergibt. Zum Beispiel -

$quoted = $dbh->quote("one\ntwo\0three")

may produce results which will be equivalent to

CONCAT('one', CHAR(12), 'two', CHAR(0), 'three')

Allen Handles gemeinsame Methoden

irren

$rv = $h->err; or $rv = $DBI::err or $rv = $h->err

Gibt den Fehlercode des nativen Datenbankmoduls von der zuletzt aufgerufenen Treibermethode zurück. Der Code ist normalerweise eine Ganzzahl, aber das sollten Sie nicht annehmen. Dies entspricht $ DBI :: err oder $ h-> err.

errstr

$str = $h->errstr; or $str = $DBI::errstr or $str = $h->errstr

Returns the native database engine error message from the last DBI method called. This has the same lifespan issues as the "err" method described above. This is equivalent to $DBI::errstr or $h->errstr.

rows

$rv = $h->rows; or $rv = $DBI::rows

This returns the number of rows effected by previous SQL statement and equivalent to $DBI::rows.

trace

$h->trace($trace_settings);

DBI sports an extremely useful ability to generate runtime tracing information of what it's doing, which can be a huge time-saver when trying to track down strange problems in your DBI programs. You can use different values to set trace level. These values varies from 0 to 4. The value 0 means disable trace and 4 means generate complete trace.

Interpolated Statements are Prohibited

It is highly recommended not to use interpolated statements as follows −

while ($first_name = <>) { my $sth = $dbh->prepare("SELECT * FROM TEST_TABLE WHERE FIRST_NAME = '$first_name'");
   $sth->execute();
   # and so on ...
}

Thus don't use interpolated statement instead use bind value to prepare dynamic SQL statement.

What is CGI ?

  • A Common Gateway Interface, or CGI, is a set of standards that defines how information is exchanged between the web server and a custom script.

  • The CGI specs are currently maintained by the NCSA and NCSA defines CGI is as follows −

  • The Common Gateway Interface, or CGI, is a standard for external gateway programs to interface with information servers such as HTTP servers.

  • The current version is CGI/1.1 and CGI/1.2 is under progress.

Web Browsing

To understand the concept of CGI, lets see what happens when we click a hyper link available on a web page to browse a particular web page or URL.

  • Your browser contacts web server using HTTP protocol and demands for the URL, i.e., web page filename.

  • Web Server will check the URL and will look for the filename requested. If web server finds that file then it sends the file back to the browser without any further execution otherwise sends an error message indicating that you have requested a wrong file.

  • Web browser takes response from web server and displays either the received file content or an error message in case file is not found.

However, it is possible to set up HTTP server in such a way so that whenever a file in a certain directory is requested that file is not sent back; instead it is executed as a program, and whatever that program outputs as a result, that is sent back for your browser to display. This can be done by using a special functionality available in the web server and it is called Common Gateway Interface or CGI and such programs which are executed by the server to produce final result, are called CGI scripts. These CGI programs can be a PERL Script, Shell Script, C or C++ program, etc.

CGI Architecture Diagram

Web Server Support and Configuration

Before you proceed with CGI Programming, make sure that your Web Server supports CGI functionality and it is configured to handle CGI programs. All the CGI programs to be executed by the web server are kept in a pre-configured directory. This directory is called CGI directory and by convention it is named as /cgi-bin. By convention Perl CGI files will have extention as .cgi.

First CGI Program

Here is a simple link which is linked to a CGI script called hello.cgi. This file has been kept in /cgi-bin/ directory and it has the following content. Before running your CGI program, make sure you have change mode of file using chmod 755 hello.cgi UNIX command.

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<title>Hello Word - First CGI Program</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! This is my first CGI program</h2>';
print '</body>';
print '</html>';

1;

Now if you click hello.cgi link then request goes to web server who search for hello.cgi in /cgi-bin directory, execute it and whatever result got generated, web server sends that result back to the web browser, which is as follows −

Hello Word! This is my first CGI program

This hello.cgi script is a simple Perl script which is writing its output on STDOUT file, i.e., screen. There is one important and extra feature available which is first line to be printed Content-type:text/html\r\n\r\n. This line is sent back to the browser and specifies the content type to be displayed on the browser screen. Now you must have undertood basic concept of CGI and you can write many complicated CGI programs using Perl. This script can interact with any other exertnal system also to exchange information such as a database, web services, or any other complex interfaces.

Understanding HTTP Header

The very first line Content-type:text/html\r\n\r\n is a part of HTTP header, which is sent to the browser so that browser can understand the incoming content from server side. All the HTTP header will be in the following form −

HTTP Field Name: Field Content

For Example −

Content-type:text/html\r\n\r\n

There are few other important HTTP headers, which you will use frequently in your CGI Programming.

Sr.No. Header & Description
1

Content-type: String

A MIME string defining the format of the content being returned. Example is Content-type:text/html

2

Expires: Date String

The date when the information becomes invalid. This should be used by the browser to decide when a page needs to be refreshed. A valid date string should be in the format 01 Jan 1998 12:00:00 GMT.

3

Location: URL String

The URL that should be returned instead of the URL requested. You can use this filed to redirect a request to any other location.

4

Last-modified: String

The date of last modification of the file.

5

Content-length: String

The length, in bytes, of the data being returned. The browser uses this value to report the estimated download time for a file.

6

Set-Cookie: String

Set the cookie passed through the string

CGI Environment Variables

All the CGI program will have access to the following environment variables. These variables play an important role while writing any CGI program.

Sr.No. Variables Names & Description
1

CONTENT_TYPE

The data type of the content. Used when the client is sending attached content to the server. For example file upload, etc.

2

CONTENT_LENGTH

The length of the query information. It's available only for POST requests

3

HTTP_COOKIE

Returns the set cookies in the form of key & value pair.

4

HTTP_USER_AGENT

The User-Agent request-header field contains information about the user agent originating the request. Its name of the web browser.

5

PATH_INFO

The path for the CGI script.

6

QUERY_STRING

The URL-encoded information that is sent with GET method request.

7

REMOTE_ADDR

The IP address of the remote host making the request. This can be useful for logging or for authentication purpose.

8

REMOTE_HOST

The fully qualified name of the host making the request. If this information is not available then REMOTE_ADDR can be used to get IR address.

9

REQUEST_METHOD

The method used to make the request. The most common methods are GET and POST.

10

SCRIPT_FILENAME

The full path to the CGI script.

11

SCRIPT_NAME

The name of the CGI script.

12

SERVER_NAME

The server's hostname or IP Address.

13

SERVER_SOFTWARE

The name and version of the software the server is running.

Here is a small CGI program to list down all the CGI variables supported by your Web server. Click this link to see the result Get Environment

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<font size=+1>Environment</font>\n";
foreach (sort keys %ENV) {
   print "<b>$_</b>: $ENV{$_}<br>\n";
}

1;

Raise a "File Download" Dialog Box?

Sometime it is desired that you want to give option where a user will click a link and it will pop up a "File Download" dialogue box to the user instead of displaying actual content. This is very easy and will be achived through HTTP header.

This HTTP header will be different from the header mentioned in previous section. For example, if you want to make a FileName file downloadable from a given link then it's syntax will be as follows −

#!/usr/bin/perl

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go hear.
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) ) { print("$buffer");
}

GET and POST Methods

You must have come across many situations when you need to pass some information from your browser to the web server and ultimately to your CGI Program handling your requests. Most frequently browser uses two methods to pass this information to the web server. These methods are GET Method and POST Method. Let's check them one by one.

Passing Information using GET Method

The GET method sends the encoded user information appended to the page URL itself. The page and the encoded information are separated by the ? character as follows −

http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2

The GET method is the defualt method to pass information from a browser to the web server and it produces a long string that appears in your browser's Location:box. You should never use GET method if you have password or other sensitive information to pass to the server. The GET method has size limitation: only 1024 characters can be passed in a request string.

This information is passed using QUERY_STRING header and will be accessible in your CGI Program through QUERY_STRING environment variable which you can parse and use in your CGI program.

You can pass information by simply concatenating key and value pairs alongwith any URL or you can use HTML <FORM> tags to pass information using GET method.

Simple URL Example: Get Method

Here is a simple URL which will pass two values to hello_get.cgi program using GET method.

http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI

Below is hello_get.cgi script to handle input given by web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "GET") {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } $first_name = $FORM{first_name}; $last_name  = $FORM{last_name}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Hello - Second CGI Program</title>"; print "</head>"; print "<body>"; print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Simple FORM Example: GET Method

Here is a simple example, which passes two values using HTML FORM and submit button. We are going to use the same CGI script hello_get.cgi to handle this input.

<FORM action = "/cgi-bin/hello_get.cgi" method = "GET">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">
<input type = "submit" value = "Submit">
</FORM>

Here is the actual output of the above form coding. Now you can enter First and Last Name and then click submit button to see the result.

Passing Information using POST Method

A more reliable method of passing information to a CGI program is the POST method. This packages the information in exactly the same way as GET methods, but instead of sending it as a text string after a ? in the URL, it sends it as a separate message as a part of HTTP header. Web server provides this message to the CGI script in the form of the standard input.

Below is the modified hello_post.cgi script to handle input given by the web browser. This script will handle GET as well as POST method.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$first_name = $FORM{first_name};
$last_name = $FORM{last_name};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Let us take again same examle as above, which passes two values using HTML FORM and submit button. We are going to use CGI script hello_post.cgi to handle this input.

<FORM action = "/cgi-bin/hello_post.cgi" method = "POST">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">

<input type = "submit" value = "Submit">
</FORM>

Here is the actual output of the above form coding, You enter First and Last Name and then click submit button to see the result.

Passing Checkbox Data to CGI Program

Checkboxes are used when more than one option is required to be selected. Here is an example HTML code for a form with two checkboxes.

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on"> Maths
<input type = "checkbox" name = "physics" value = "on"> Physics
<input type = "submit" value = "Select Subject">
</form>

The result of this code is the following form −

Below is checkbox.cgi script to handle input given by web browser for radio button.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } if( $FORM{maths} ) {
   $maths_flag ="ON"; } else { $maths_flag ="OFF";
}
if( $FORM{physics} ) { $physics_flag ="ON";
} else {
   $physics_flag ="OFF"; } print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Checkbox - Third CGI Program</title>"; print "</head>"; print "<body>"; print "<h2> CheckBox Maths is : $maths_flag</h2>";
print "<h2> CheckBox Physics is : $physics_flag</h2>";
print "</body>";
print "</html>";

1;

Passing Radio Button Data to CGI Program

Radio Buttons are used when only one option is required to be selected. Here is an example HTML code for a form with two radio button −

<form action = "/cgi-bin/radiobutton.cgi" method = "POST" target = "_blank">
<input type = "radio" name = "subject" value = "maths"> Maths
<input type = "radio" name = "subject" value = "physics"> Physics
<input type = "submit" value = "Select Subject">
</form>

The result of this code is the following form −

Below is radiobutton.cgi script to handle input given by the web browser for radio button.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{subject};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Radio - Fourth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Passing Text Area Data to CGI Program

A textarea element is used when multiline text has to be passed to the CGI Program. Here is an example HTML code for a form with a TEXTAREA box −

<form action = "/cgi-bin/textarea.cgi" method = "POST" target = "_blank">
<textarea name = "textcontent" cols = 40 rows = 4>
Type your text here...
</textarea>
<input type = "submit" value = "Submit">
</form>

The result of this code is the following form −

Below is the textarea.cgi script to handle input given by the web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$text_content = $FORM{textcontent};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Entered Text Content is $text_content</h2>";
print "</body>";
print "</html>";

1;

Passing Drop Down Box Data to CGI Program

A drop down box is used when we have many options available but only one or two will be selected. Here is example HTML code for a form with one drop down box

<form action = "/cgi-bin/dropdown.cgi" method = "POST" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit">
</form>

The result of this code is the following form −

Below is the dropdown.cgi script to handle input given by web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{dropdown};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Dropdown Box - Sixth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Verwenden von Cookies in CGI

Das HTTP-Protokoll ist ein zustandsloses Protokoll. Für eine kommerzielle Website ist es jedoch erforderlich, Sitzungsinformationen zwischen verschiedenen Seiten zu verwalten. Beispielsweise endet eine Benutzerregistrierung nach Transaktionen, die sich über mehrere Seiten erstrecken. Aber wie können die Sitzungsinformationen des Benutzers auf allen Webseiten verwaltet werden?

In vielen Situationen ist die Verwendung von Cookies die effizienteste Methode, um Einstellungen, Einkäufe, Provisionen und andere Informationen zu speichern und zu verfolgen, die für eine bessere Besuchererfahrung oder Site-Statistiken erforderlich sind.

Wie es funktioniert

Ihr Server sendet einige Daten in Form eines Cookies an den Browser des Besuchers. Der Browser akzeptiert möglicherweise das Cookie. In diesem Fall wird es als Nur-Text-Datensatz auf der Festplatte des Besuchers gespeichert. Wenn der Besucher nun auf einer anderen Seite Ihrer Website ankommt, kann das Cookie abgerufen werden. Nach dem Abrufen weiß Ihr Server, was gespeichert wurde.

Cookies sind ein Nur-Text-Datensatz mit 5 Feldern variabler Länge.

  • Expires- Das Datum, an dem der Cookie abläuft. Wenn dies leer ist, läuft das Cookie ab, wenn der Besucher den Browser verlässt.

  • Domain - Der Domainname Ihrer Site.

  • Path- Der Pfad zu dem Verzeichnis oder der Webseite, in dem das Cookie gesetzt wurde. Dies kann leer sein, wenn Sie das Cookie aus einem beliebigen Verzeichnis oder einer beliebigen Seite abrufen möchten.

  • Secure- Wenn dieses Feld das Wort "sicher" enthält, kann das Cookie nur mit einem sicheren Server abgerufen werden. Wenn dieses Feld leer ist, besteht keine solche Einschränkung.

  • Name = Value - Cookies werden in Form von Schlüssel- und Wertepaaren gesetzt und erneut angezeigt.

Cookies einrichten

Es ist sehr einfach, Cookies an den Browser zu senden. Diese Cookies werden zusammen mit dem HTTP-Header gesendet. Angenommen, Sie möchten Benutzer-ID und Kennwort als Cookies festlegen. So wird es wie folgt gemacht -

#!/usr/bin/perl

print "Set-Cookie:UserID = XYZ;\n";
print "Set-Cookie:Password = XYZ123;\n";
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\n";
print "Set-Cookie:Domain = www.tutorialspoint.com;\n";
print "Set-Cookie:Path = /perl;\n";
print "Content-type:text/html\r\n\r\n";
...........Rest of the HTML Content goes here....

Hier haben wir verwendet Set-CookieHTTP-Header zum Setzen von Cookies. Es ist optional, Cookie-Attribute wie Expires, Domain und Path festzulegen. Es ist wichtig zu beachten, dass Cookies gesetzt werden, bevor eine magische Linie gesendet wird"Content-type:text/html\r\n\r\n.

Cookies abrufen

Es ist sehr einfach, alle gesetzten Cookies abzurufen. Cookies werden in der CGI-Umgebungsvariablen HTTP_COOKIE gespeichert und haben die folgende Form.

key1 = value1;key2 = value2;key3 = value3....

Hier ist ein Beispiel zum Abrufen von Cookies.

#!/usr/bin/perl
$rcvd_cookies = $ENV{'HTTP_COOKIE'}; @cookies = split /;/, $rcvd_cookies;
foreach $cookie ( @cookies ) { ($key, $val) = split(/=/, $cookie); # splits on the first =.
   $key =~ s/^\s+//; $val =~ s/^\s+//;
   $key =~ s/\s+$//;
   $val =~ s/\s+$//;
   if( $key eq "UserID" ) { $user_id = $val; } elsif($key eq "Password") {
      $password = $val;
   }
}
print "User ID  = $user_id\n"; print "Password = $password\n";

Dies führt zu folgendem Ergebnis, vorausgesetzt, die oben genannten Cookies wurden gesetzt, bevor das Skript zum Abrufen von Cookies aufgerufen wurde.

User ID = XYZ
Password = XYZ123

CGI-Module und Bibliotheken

Über das Internet finden Sie viele integrierte Module, die Ihnen direkte Funktionen zur Verwendung in Ihrem CGI-Programm bieten. Im Folgenden sind die wichtigen einmal aufgeführt.

  • CGI-Modul

  • Berkeley cgi-lib.pl

Was sind Pakete?

Das packageDie Anweisung wechselt den aktuellen Namenskontext in einen angegebenen Namespace (Symboltabelle). Also -

  • Ein Paket ist eine Code-Sammlung, die in einem eigenen Namespace lebt.

  • Ein Namespace ist eine benannte Sammlung eindeutiger Variablennamen (auch als Symboltabelle bezeichnet).

  • Namespaces verhindern Kollisionen von Variablennamen zwischen Paketen.

  • Pakete ermöglichen die Erstellung von Modulen, die bei Verwendung keine Variablen und Funktionen außerhalb des eigenen Namespace des Moduls blockieren.

  • Das Paket bleibt in Kraft, bis entweder eine andere Paketanweisung aufgerufen wird oder bis das Ende des aktuellen Blocks oder der aktuellen Datei erreicht ist.

  • Mit dem können Sie explizit auf Variablen innerhalb eines Pakets verweisen :: Paketqualifizierer.

Es folgt ein Beispiel mit Haupt- und Foo-Paketen in einer Datei. Hier wurde die spezielle Variable __PACKAGE__ verwendet, um den Paketnamen zu drucken.

#!/usr/bin/perl

# This is main package
$i = 1; print "Package name : " , __PACKAGE__ , " $i\n"; 

package Foo;
# This is Foo package
$i = 10; print "Package name : " , __PACKAGE__ , " $i\n"; 

package main;
# This is again main package
$i = 100; print "Package name : " , __PACKAGE__ , " $i\n"; 
print "Package name : " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10

BEGIN- und END-Blöcke

Sie können eine beliebige Anzahl von Codeblöcken mit den Namen BEGIN und END definieren, die als Konstruktoren bzw. Destruktoren fungieren.

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • Jeder BEGIN Der Block wird ausgeführt, nachdem das Perl-Skript geladen und kompiliert wurde, aber bevor eine andere Anweisung ausgeführt wird.

  • Jeder END-Block wird unmittelbar vor dem Beenden des Perl-Interpreters ausgeführt.

  • Die BEGIN- und END-Blöcke sind besonders nützlich beim Erstellen von Perl-Modulen.

Das folgende Beispiel zeigt seine Verwendung -

#!/usr/bin/perl

package Foo;
print "Begin and Block Demo\n";

BEGIN { 
   print "This is BEGIN Block\n" 
}

END { 
   print "This is END Block\n" 
}

1;

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

This is BEGIN Block
Begin and Block Demo
This is END Block

Was sind Perl-Module?

Ein Perl-Modul ist ein wiederverwendbares Paket, das in einer Bibliotheksdatei definiert ist, deren Name mit dem Namen des Pakets mit der Erweiterung .pm als Erweiterung übereinstimmt.

Eine Perl-Moduldatei mit dem Namen Foo.pm könnte Aussagen wie diese enthalten.

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Einige wichtige Punkte zu Perl-Modulen

  • Die Funktionen require und use lädt ein Modul.

  • Beide verwenden die Liste der Suchpfade in @INC um das Modul zu finden.

  • Beide Funktionen require und use Ruf den eval Funktion zum Verarbeiten des Codes.

  • Das 1; unten bewirkt, dass eval auf TRUE bewertet wird (und somit nicht fehlschlägt).

Die Require-Funktion

Ein Modul kann durch Aufrufen von geladen werden require Funktion wie folgt -

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

Sie müssen bemerkt haben, dass die Unterprogrammnamen vollständig qualifiziert sein müssen, um sie aufzurufen. Es wäre schön, das Unterprogramm zu aktivierenbar und blat um in unseren eigenen Namespace importiert zu werden, müssen wir nicht das Foo :: Qualifier verwenden.

Die Use-Funktion

Ein Modul kann durch Aufrufen von geladen werden use Funktion.

#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

Beachten Sie, dass wir die Funktionsnamen des Pakets nicht vollständig qualifizieren mussten. Dasuse Die Funktion exportiert eine Liste von Symbolen aus einem Modul, wobei einige zusätzliche Anweisungen innerhalb eines Moduls hinzugefügt werden.

require Exporter;
@ISA = qw(Exporter);

Stellen Sie dann eine Liste mit Symbolen (Skalare, Listen, Hashes, Unterprogramme usw.) bereit, indem Sie die benannte Listenvariable ausfüllen @EXPORT: Zum Beispiel -

package Module;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" } sub splat { print "Not $_[0]\n" }  # Not exported!

1;

Erstellen Sie den Perl-Modulbaum

Wenn Sie bereit sind, Ihr Perl-Modul zu versenden, gibt es eine Standardmethode zum Erstellen eines Perl-Modulbaums. Dies geschieht mith2xsNützlichkeit. Dieses Dienstprogramm wird zusammen mit Perl geliefert. Hier ist die Syntax zur Verwendung von h2xs -

$h2xs -AX -n  ModuleName

Zum Beispiel, wenn Ihr Modul in verfügbar ist Person.pm Datei, dann geben Sie einfach den folgenden Befehl ein -

$h2xs -AX -n Person

Dies führt zu folgendem Ergebnis:

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

Hier ist die Beschreibung dieser Optionen -

  • -A lässt den Autoloader-Code weg (am besten von Modulen verwendet, die eine große Anzahl selten verwendeter Unterprogramme definieren).

  • -X lässt XS-Elemente weg (eXternal Subroutine, wobei eXternal außerhalb von Perl bedeutet, dh C).

  • -n Gibt den Namen des Moduls an.

Der obige Befehl erstellt also die folgende Struktur im Personenverzeichnis. Das tatsächliche Ergebnis ist oben dargestellt.

  • Changes
  • Makefile.PL
  • MANIFEST (enthält die Liste aller Dateien im Paket)
  • README
  • t / (Testdateien)
  • lib / (Aktueller Quellcode finden Sie hier

Also endlich du tarDiese Verzeichnisstruktur in eine Datei Person.tar.gz und Sie können es versenden. Sie müssen die README-Datei mit den richtigen Anweisungen aktualisieren. Sie können auch einige Testbeispieldateien im Verzeichnis t bereitstellen.

Perl-Modul installieren

Laden Sie ein Perl-Modul in der Form tar.gz herunter. Verwenden Sie die folgende Reihenfolge, um ein Perl-Modul zu installierenPerson.pm welches in heruntergeladen wurde als Person.tar.gz Datei.

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

Der Perl-Interpreter verfügt über eine Liste von Verzeichnissen, in denen er nach Modulen sucht (globales Array @INC).

Sie können Perl auf verschiedene Arten verwenden, um neue Prozesse gemäß Ihren Anforderungen zu erstellen. In diesem Tutorial werden einige wichtige und am häufigsten verwendete Methoden zum Erstellen und Verwalten von Perl-Prozessen aufgeführt.

  • Sie können spezielle Variablen verwenden $$ oder $PROCESS_ID um die aktuelle Prozess-ID abzurufen.

  • Jeder Prozess, der mit einer der genannten Methoden erstellt wurde, verwaltet seine eigene virtuelle Umgebung mit In %ENV Variable.

  • Das exit() Die Funktion beendet immer nur den untergeordneten Prozess, der diese Funktion ausführt, und der Hauptprozess als Ganzes wird erst beendet, wenn alle laufenden untergeordneten Prozesse beendet wurden.

  • Alle geöffneten Handles werden in untergeordneten Prozessen mit dup () versehen, sodass das Schließen von Handles in einem Prozess keine Auswirkungen auf die anderen hat.

Backstick-Bediener

Diese einfachste Art, einen Unix-Befehl auszuführen, ist die Verwendung des Backstick-Operators. Sie geben Ihren Befehl einfach in den Backstick-Operator ein, wodurch der Befehl ausgeführt wird und das Ergebnis zurückgegeben wird, das wie folgt gespeichert werden kann:

#!/usr/bin/perl

@files = `ls -l`;

foreach $file (@files) { print $file;
}

1;

Wenn der obige Code ausgeführt wird, werden alle im aktuellen Verzeichnis verfügbaren Dateien und Verzeichnisse aufgelistet.

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

Die system () Funktion

Sie können auch verwenden system()Funktion zum Ausführen eines Unix-Befehls, dessen Ausgabe an die Ausgabe des Perl-Skripts geht. Standardmäßig ist dies der Bildschirm, dh STDOUT, aber Sie können ihn mit dem Umleitungsoperator> - in eine beliebige Datei umleiten

#!/usr/bin/perl

system( "ls -l")

1;

Wenn der obige Code ausgeführt wird, werden alle im aktuellen Verzeichnis verfügbaren Dateien und Verzeichnisse aufgelistet.

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

Seien Sie vorsichtig, wenn Ihr Befehl Shell-Umgebungsvariablen wie enthält $PATH or $ZUHAUSE. Versuchen Sie die folgenden drei Szenarien:

#!/usr/bin/perl

$PATH = "I am Perl Variable"; system('echo $PATH');  # Treats $PATH as shell variable system("echo $PATH");  # Treats $PATH as Perl variable system("echo \$PATH"); # Escaping $ works.

1;

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt, abhängig davon, was in der Shell-Variablen $ PATH festgelegt ist.

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
I am Perl Variable
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

Die fork () Funktion

Perl bietet eine fork()Funktion, die dem gleichnamigen Unix-Systemaufruf entspricht. Auf den meisten Unix-ähnlichen Plattformen, auf denen der Systemaufruf fork () verfügbar ist, ruft Perls fork () ihn einfach auf. Auf einigen Plattformen wie Windows, auf denen der Systemaufruf fork () nicht verfügbar ist, kann Perl so erstellt werden, dass fork () auf Interpreterebene emuliert wird.

Die Funktion fork () wird verwendet, um einen aktuellen Prozess zu klonen. Dieser Aufruf erstellt einen neuen Prozess, in dem dasselbe Programm am selben Punkt ausgeführt wird. Es gibt die untergeordnete PID an den übergeordneten Prozess zurück, 0 an den untergeordneten Prozess oder undef, wenn der Fork nicht erfolgreich ist.

Sie können verwenden exec() Funktion innerhalb eines Prozesses zum Starten der angeforderten ausführbaren Datei, die in einem separaten Prozessbereich ausgeführt wird und exec () wartet, bis sie abgeschlossen ist, bevor sie mit demselben Beendigungsstatus wie dieser Prozess beendet wird.

#!/usr/bin/perl

if(!defined($pid = fork())) { # fork returned undef, so unsuccessful die "Cannot fork a child: $!";
} elsif ($pid == 0) { print "Printed by child process\n"; exec("date") || die "can't exec date: $!";
  
} else {
   # fork returned 0 nor undef
   # so this branch is parent
   print "Printed by parent process\n";
   $ret = waitpid($pid, 0);
   print "Completed process id: $ret\n";

}

1;

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Printed by parent process
Printed by child process
Tue Sep 17 15:41:08 CDT 2013
Completed process id: 17777

Das wait() und waitpid()kann als Pseudoprozess-ID übergeben werden, die von fork () zurückgegeben wird. Diese Aufrufe warten ordnungsgemäß auf die Beendigung des Pseudoprozesses und geben seinen Status zurück. Wenn Sie gabeln, ohne jemals darauf zu warten, dass Ihre Kinder es benutzenwaitpid()Funktion, werden Sie Zombies ansammeln. Auf Unix-Systemen können Sie dies vermeiden, indem Sie $ SIG {CHLD} wie folgt auf "IGNORE" setzen -

#!/usr/bin/perl

local $SIG{CHLD} = "IGNORE"; if(!defined($pid = fork())) {
   # fork returned undef, so unsuccessful
   die "Cannot fork a child: $!"; } elsif ($pid == 0) {
   print "Printed by child process\n";
   exec("date") || die "can't exec date: $!"; } else { # fork returned 0 nor undef # so this branch is parent print "Printed by parent process\n"; $ret = waitpid($pid, 0); print "Completed process id: $ret\n";

}

1;

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Printed by parent process
Printed by child process
Tue Sep 17 15:44:07 CDT 2013
Completed process id: -1

Die Funktion kill ()

Perl kill('KILL', (Process List)) Die Funktion kann verwendet werden, um einen Pseudoprozess zu beenden, indem ihm die von fork () zurückgegebene ID übergeben wird.

Beachten Sie, dass die Verwendung von kill ('KILL', (Prozessliste)) für einen Pseudoprozess () normalerweise zu Speicherverlusten führen kann, da der Thread, der den Pseudoprozess implementiert, keine Chance erhält, seine Ressourcen zu bereinigen.

Sie können verwenden kill() Die Funktion zum Senden eines anderen Signals an Zielprozesse, z. B. das folgende, sendet SIGINT an die Prozess-IDs 104 und 102 -

#!/usr/bin/perl

kill('INT', 104, 102);
 
1;

Sie können die Pod-Dokumentation (Plain Old Text) in Ihre Perl-Module und -Skripte einbetten. Im Folgenden finden Sie die Regel für die Verwendung eingebetteter Dokumentation in Ihrem Perl-Code:

Beginnen Sie Ihre Dokumentation mit einer leeren Zeile, a =head1 Befehl am Anfang und beenden Sie ihn mit einem =cut

Perl ignoriert den Pod-Text, den Sie in den Code eingegeben haben. Im Folgenden finden Sie ein einfaches Beispiel für die Verwendung eingebetteter Dokumentation in Ihrem Perl-Code:

#!/usr/bin/perl

print "Hello, World\n";

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
=cut

print "Hello, Universe\n";

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hello, World
Hello, Universe

Wenn Sie Ihren Pod am Ende der Datei platzieren und eine __END__- oder __DATA__- Schnittmarke verwenden, stellen Sie sicher, dass vor dem ersten Pod-Befehl wie folgt eine leere Zeile eingefügt wird, andernfalls ohne vorherige leere Zeile das =head1Viele Übersetzer hätten das = nicht erkannthead1 als Start eines Pod-Blocks.

#!/usr/bin/perl

print "Hello, World\n";

while(<DATA>) {
  print $_;
}

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hello, World

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Nehmen wir noch ein Beispiel für denselben Code, ohne den DATA-Teil zu lesen -

#!/usr/bin/perl

print "Hello, World\n";

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Hello, World

Was ist POD?

Pod ist eine einfach zu verwendende Auszeichnungssprache, mit der Dokumentation für Perl-, Perl-Programme und Perl-Module geschrieben wird. Für die Konvertierung von Pod in verschiedene Formate wie Nur-Text, HTML, Manpages und mehr stehen verschiedene Übersetzer zur Verfügung. Das Pod-Markup besteht aus drei grundlegenden Arten von Absätzen:

  • Ordinary Paragraph - Sie können Formatierungscodes in normalen Absätzen für Fettdruck, Kursivschrift, Codestil, Hyperlinks und mehr verwenden.

  • Verbatim Paragraph - Wörtliche Absätze werden normalerweise zum Präsentieren eines Codeblocks oder eines anderen Textes verwendet, für den keine spezielle Analyse oder Formatierung erforderlich ist und der nicht umbrochen werden sollte.

  • Command Paragraph- Ein Befehlsabsatz wird zur speziellen Behandlung ganzer Textblöcke verwendet, normalerweise als Überschriften oder Teile von Listen. Alle Befehlsabsätze beginnen mit =, gefolgt von einem Bezeichner, gefolgt von einem beliebigen Text, den der Befehl nach Belieben verwenden kann. Derzeit erkannte Befehle sind -

=pod
=head1 Heading Text
=head2 Heading Text
=head3 Heading Text
=head4 Heading Text
=over indentlevel
=item stuff
=back
=begin format
=end format
=for format text...
=encoding type
=cut

POD-Beispiele

Betrachten Sie den folgenden POD -

=head1 SYNOPSIS
Copyright 2005 [TUTORIALSOPOINT].
=cut

Sie können verwenden pod2html Unter Linux verfügbares Dienstprogramm zum Konvertieren des obigen POD in HTML, sodass das folgende Ergebnis erzielt wird:

Betrachten Sie als nächstes das folgende Beispiel:

=head2 An Example List

=over 4
=item * This is a bulleted list.
=item * Here's another item.
=back
=begin html
<p>
Here's some embedded HTML.  In this block I can
include images, apply <span style="color: green">
styles</span>, or do anything else I can do with
HTML.  pod parsers that aren't outputting HTML will
completely ignore it.
</p>

=end html

Wenn Sie den obigen POD mit pod2html in HTML konvertieren, wird das folgende Ergebnis angezeigt:

An Example List
   This is a bulleted list.
   Here's another item.
Here's some embedded HTML. In this block I can include images, apply 
styles, or do anything else I can do with HTML. pod parsers that aren't 
outputting HTML will completely ignore it.

Hier ist die Liste aller wichtigen Funktionen, die von Standard Perl unterstützt werden.

  • abs - Absolutwertfunktion

  • accept - Akzeptiere eine eingehende Socket-Verbindung

  • Alarm - Planen Sie ein SIGALRM

  • atan2 - Arkustangens von Y / X im Bereich -PI bis PI

  • bind - bindet eine Adresse an einen Socket

  • binmode - Bereiten Sie Binärdateien für E / A vor

  • segne - erstelle ein Objekt

  • Aufrufer - Kontext des aktuellen Unterprogrammaufrufs abrufen

  • chdir - Ändern Sie Ihr aktuelles Arbeitsverzeichnis

  • chmod - Ändert die Berechtigungen für eine Liste von Dateien

  • chomp - Entfernen Sie ein nachfolgendes Datensatztrennzeichen aus einer Zeichenfolge

  • chop - entferne das letzte Zeichen aus einer Zeichenkette

  • chown - Ändern Sie die Eigentümerschaft in einer Liste von Dateien

  • chr - get Zeichen, das diese Zahl darstellt

  • chroot - Verzeichnis neu erstellen für Pfadsuche

  • Schließen - Schließen Sie den Datei- (oder Rohr- oder Muffen-) Griff

  • geschlossenes - Verzeichnishandle schließen

  • Verbinden - Verbinden Sie sich mit einer Remote-Buchse

  • weiter - optionaler nachlaufender Block in einer Weile oder für jeden

  • cos - cosine Funktion

  • crypt - Einweg-Passwd-Verschlüsselung

  • dbmclose - Unterbricht die Bindung an eine gebundene DBM-Datei

  • dbmopen - Erstellen Sie eine Bindung für eine gebundene DBM-Datei

  • defined - Testet, ob ein Wert, eine Variable oder eine Funktion definiert ist oder nicht

  • delete - löscht einen Wert aus einem Hash

  • sterben - eine Ausnahme auslösen oder aussteigen

  • do - verwandle einen BLOCK in einen BEGRIFF

  • Dump - Erstellen Sie einen sofortigen Core-Dump

  • jedes - ruft das nächste Schlüssel / Wert-Paar aus einem Hash ab

  • endgrent - wird mit einer Gruppendatei durchgeführt

  • endhostent - wird mit der Hosts-Datei durchgeführt

  • endnetent - erfolgt über die Netzwerkdatei

  • endprotoent - wird mit der Protokolldatei durchgeführt

  • endpwent - wird mit der passwd-Datei durchgeführt

  • Endservent - wird mithilfe der Servicedatei ausgeführt

  • eof - Testen Sie ein Dateihandle auf sein Ende

  • eval - Ausnahmen abfangen oder Code kompilieren und ausführen

  • exec - Verlassen Sie dieses Programm, um ein anderes auszuführen

  • existiert - teste, ob ein Hash-Schlüssel vorhanden ist

  • exit - Beenden Sie dieses Programm

  • exp - erhöhe ich zu einer Macht

  • fcntl - Dateisteuerungssystemaufruf

  • fileno - gibt den Dateideskriptor vom Dateihandle zurück

  • Flock - Sperren Sie eine gesamte Datei mit einem Hinweisschloss

  • Gabel - erstelle einen neuen Prozess wie diesen

  • format - Deklariert ein Bildformat mit der Funktion write ()

  • formline - interne Funktion für Formate

  • getc - holt das nächste Zeichen aus dem Dateihandle

  • getgrent - nächsten Gruppendatensatz abrufen

  • getgrgid - Gruppendatensatz mit Gruppenbenutzer-ID abrufen

  • getgrnam - Gruppendatensatz mit gegebenem Gruppennamen abrufen

  • gethostbyaddr - Host-Datensatz mit seiner Adresse abrufen

  • gethostbyname - Host-Datensatz mit Vornamen abrufen

  • gethostent - Holen Sie sich den nächsten Host-Datensatz

  • getlogin - gibt zurück, wer sich bei diesem tty angemeldet hat

  • getnetbyaddr - Netzwerkdatensatz mit seiner Adresse abrufen

  • getnetbyname - Get Network Record Vorname

  • getnetent - nächsten Netzwerkdatensatz abrufen

  • getpeername - Finden Sie das andere Ende einer Socket-Verbindung

  • getpgrp - Prozessgruppe abrufen

  • getppid - Abrufen der übergeordneten Prozess-ID

  • getpriority - Holen Sie sich den aktuellen Wert

  • getprotobyname - Protokolldatensatz mit Vornamen abrufen

  • getprotobynumber - Protokollprotokoll numerisches Protokoll abrufen

  • getprotoent - nächsten Protokolldatensatz abrufen

  • getpwent - nächsten passwd-Datensatz abrufen

  • getpwnam - Passwd- Datensatz unter Angabe des Benutzernamen erhalten

  • getpwuid - Passwd- Datensatz unter Angabe der Benutzer-ID abrufen

  • getervbyname - Dienstdatensatz mit seinem Namen abrufen

  • getervbyport - Ruft den Dienstdatensatz mit dem angegebenen numerischen Port ab

  • getervent - Holen Sie sich den nächsten Service-Datensatz

  • getockname - Ruft den Sockaddr für einen bestimmten Socket ab

  • getockopt - Socket-Optionen für einen bestimmten Socket abrufen

  • glob - Dateinamen mit Platzhaltern erweitern

  • gmtime - Konvertiert die UNIX-Zeit im Greenwich-Zeitformat in einen Datensatz oder eine Zeichenfolge.

  • gehe zu - erstelle Spaghetti-Code

  • grep - Finde Elemente in einem Listentest, der anhand eines bestimmten Kriteriums wahr ist

  • hex - Konvertiert eine Zeichenfolge in eine Hexadezimalzahl

  • importieren - Patchen Sie den Namespace eines Moduls in Ihren eigenen

  • index - Finde einen Teilstring innerhalb eines Strings

  • int - Ermittelt den ganzzahligen Teil einer Zahl

  • ioctl - Systemabhängiger Aufruf des Gerätesteuerungssystems

  • join - Verbinde eine Liste mit einem Trennzeichen zu einer Zeichenfolge

  • Schlüssel - Ruft eine Liste der Indizes aus einem Hash ab

  • kill - sendet ein Signal an einen Prozess oder eine Prozessgruppe

  • last - Block vorzeitig verlassen

  • lc - gibt eine Kleinbuchstabenversion eines Strings zurück

  • lcfirst - gibt eine Zeichenfolge mit nur dem nächsten Buchstaben in Kleinbuchstaben zurück

  • Länge - Gibt die Anzahl der Bytes in einer Zeichenfolge zurück

  • Link - Erstellen Sie einen festen Link im Dateisystem

  • listen - Registrieren Sie Ihren Socket als Server

  • lokal - Erstellen Sie einen temporären Wert für eine globale Variable (dynamisches Scoping).

  • Ortszeit - Konvertiert die UNIX-Zeit mithilfe der Ortszeit in einen Datensatz oder eine Zeichenfolge

  • lock - Ruft eine Thread-Sperre für eine Variable, ein Unterprogramm oder eine Methode ab

  • log - Ruft den natürlichen Logarithmus für eine Zahl ab

  • lstat - stat eine symbolische Verbindung

  • m - eine Zeichenfolge mit einem Muster für reguläre Ausdrücke abgleichen

  • map - Wendet eine Änderung auf eine Liste an, um eine neue Liste mit den Änderungen wiederherzustellen

  • mkdir - Erstelle ein Verzeichnis

  • msgctl - SysV IPC-Nachrichtensteuerungsvorgänge

  • msgget - SysV IPC-Nachrichtenwarteschlange abrufen

  • msgrcv - Empfängt eine SysV IPC-Nachricht aus einer Nachrichtenwarteschlange

  • msgsnd - Sendet eine SysV-IPC-Nachricht an eine Nachrichtenwarteschlange

  • my - deklariere und weise eine lokale Variable zu (lexikalisches Scoping)

  • next - iteriere einen Block vorzeitig

  • no - Importieren Sie einige Modul-Symbole oder -Semantiken zur Kompilierungszeit nicht

  • oct - Konvertiert eine Zeichenfolge in eine Oktalzahl

  • Öffnen - Öffnen Sie eine Datei, eine Pipe oder einen Deskriptor

  • opendir - öffne ein Verzeichnis

  • ord - finde die numerische Darstellung eines Zeichens

  • our - deklariert und weist eine Paketvariable zu (lexikalisches Scoping)

  • pack - konvertiert eine Liste in eine binäre Darstellung

  • package - Deklariert einen separaten globalen Namespace

  • Rohr - Öffnen Sie ein Paar angeschlossener Dateihandles

  • pop - entferne das letzte Element aus einem Array und gib es zurück

  • pos - finde oder setze den Offset für die letzte / nächste m // g Suche

  • print - Gibt eine Liste in ein Dateihandle aus

  • printf - gibt eine formatierte Liste in ein Dateihandle aus

  • Prototyp - Holen Sie sich den Prototyp (falls vorhanden) eines Unterprogramms

  • push - Hänge ein oder mehrere Elemente an ein Array an

  • q - zitieren Sie einfach eine Zeichenfolge

  • qq - zitiere doppelt einen String

  • qr - Muster kompilieren

  • quotemeta - zitiere magische Zeichen mit regulären Ausdrücken

  • qw - zitiere eine Liste von Wörtern

  • qx - backquote zitiert einen String

  • rand - ruft die nächste Pseudozufallszahl ab

  • read - gepufferte Eingabe mit fester Länge von einem Dateihandle

  • readdir - Ruft ein Verzeichnis aus einem Verzeichnishandle ab

  • readline - holt einen Datensatz aus einer Datei

  • readlink - Bestimmen Sie, wohin ein symbolischer Link zeigt

  • readpipe - führt einen Systembefehl aus und sammelt die Standardausgabe

  • recv - eine Nachricht über einen Socket empfangen

  • Wiederholen - Starten Sie diese Schleifeniteration erneut

  • ref - Finden Sie heraus, auf welche Art von Dingen verwiesen wird

  • umbenennen - Ändern Sie einen Dateinamen

  • require - Laden Sie zur Laufzeit externe Funktionen aus einer Bibliothek

  • Zurücksetzen - Löscht alle Variablen eines bestimmten Namens

  • Rückkehr - Verlassen Sie eine Funktion frühzeitig

  • umgekehrt - einen String oder eine Liste umdrehen

  • rewinddir - Verzeichnishandle zurücksetzen

  • rindex - Suche nach Teilzeichenfolgen von rechts nach links

  • rmdir - entferne ein Verzeichnis

  • s - Ersetzen Sie ein Muster durch eine Zeichenfolge

  • Skalar - Erzwingt einen skalaren Kontext

  • seek - Dateizeiger für E / A mit wahlfreiem Zugriff neu positionieren

  • seekdir - Verzeichniszeiger neu positionieren

  • select - Standardausgang zurücksetzen oder E / A-Multiplexing durchführen

  • semctl - SysV-Semaphorsteuerungsoperationen

  • semget - Setze eine Reihe von SysV-Semaphoren

  • semop - SysV-Semaphoroperationen

  • Senden - Senden Sie eine Nachricht über einen Socket

  • setgrent - Gruppendatei für die Verwendung vorbereiten

  • sethostent - Hosts-Datei für die Verwendung vorbereiten

  • setnetent - Netzwerkdatei für die Verwendung vorbereiten

  • setpgrp - Legt die Prozessgruppe eines Prozesses fest

  • setpriority - Setzt den netten Wert eines Prozesses

  • setprotoent - Protokolldatei für die Verwendung vorbereiten

  • setpwent - Passwd- Datei für die Verwendung vorbereiten

  • setservent - Bereiten Sie die Servicedatei für die Verwendung vor

  • setsockopt - Setzt einige Socket-Optionen

  • shift - Entfernen Sie das erste Element eines Arrays und geben Sie es zurück

  • shmctl - Shared Memory-Operationen von SysV

  • shmget - SysV Shared Memory Segment Identifier abrufen

  • shmread - SysV Shared Memory lesen

  • shmwrite - SysV Shared Memory schreiben

  • Herunterfahren - Schließen Sie nur die Hälfte einer Socket-Verbindung

  • sin - gib den Sinus einer Zahl zurück

  • Schlafblock für einige Sekunden

  • Socket - Erstellen Sie einen Socket

  • Socketpair - Erstellen Sie ein Paar Sockets

  • sort - sortiert eine Liste von Werten

  • Spleißen - Fügen Sie Elemente an einer beliebigen Stelle in einem Array hinzu oder entfernen Sie sie

  • split - Teilen Sie eine Zeichenfolge mit einem Regexp-Trennzeichen auf

  • sprintf - formatierter Druck in eine Zeichenfolge

  • sqrt - Quadratwurzelfunktion

  • srand - Start des Zufallszahlengenerators

  • stat - Statusinformationen einer Datei abrufen

  • Studie - Optimieren Sie die Eingabedaten für wiederholte Suchvorgänge

  • Unter - festzustellen , das ein Unterprogramm, möglicherweise anonym

  • Teil - einen Teil einer Stirng bekommen oder verändern

  • symlink - Erstellt einen symbolischen Link zu einer Datei

  • syscall - führt einen beliebigen Systemaufruf aus

  • sysopen - Öffnen Sie eine Datei, eine Pipe oder einen Deskriptor

  • sysread - ungepufferte Eingabe mit fester Länge von einem Dateihandle

  • sysseek - Positioniert den E / A-Zeiger auf dem Handle, der mit sysread und syswrite verwendet wird

  • System - Führen Sie ein separates Programm aus

  • syswrite - ungepufferte Ausgabe mit fester Länge an ein Dateihandle

  • tell - aktuellen Suchzeiger auf einem Dateihandle abrufen

  • telldir - Aktuellen Suchzeiger für ein Verzeichnishandle abrufen

  • tie - Bindet eine Variable an eine Objektklasse

  • gebunden - Ruft einen Verweis auf das Objekt ab, das einer gebundenen Variablen zugrunde liegt

  • time - return Anzahl der Sekunden seit 1970

  • times - Verstrichene Zeit für Selbst- und Kinderprozesse zurückgeben

  • tr - eine Zeichenfolge transliterieren

  • abschneiden - eine Datei kürzen

  • uc - Gibt eine Großbuchstabenversion eines Strings zurück

  • ucfirst - gibt eine Zeichenfolge mit nur dem nächsten Buchstaben in Großbuchstaben zurück

  • umask - Festlegen der Maske für den Dateierstellungsmodus

  • undef - Entferne eine Variablen- oder Funktionsdefinition

  • unlink - Entfernen Sie einen Link zu einer Datei

  • entpacken - Konvertiert die Binärstruktur in normale Perl-Variablen

  • Verschieben - Stellen Sie weitere Elemente an den Anfang einer Liste

  • lösen - brechen Sie eine Bindung, die an eine Variable gebunden ist

  • use - Laden zur Kompilierungszeit in ein Modul

  • utime - Legt den letzten Zugriff einer Datei fest und ändert die Zeiten

  • Werte - Gibt eine Liste der Werte in einem Hash zurück

  • vec - teste oder setze bestimmte Bits in einer Zeichenfolge

  • Warten - Warten Sie, bis ein untergeordneter Prozess beendet ist

  • waitpid - Warten Sie, bis ein bestimmter untergeordneter Prozess beendet ist

  • wantarray - get void vs scalar vs list context des aktuellen Unterprogrammaufrufs

  • warn - Debugging-Informationen drucken

  • Schreiben - Drucken Sie eine Bildaufzeichnung

  • -X - ein Dateitest (-r, -x usw.)

  • y - eine Zeichenfolge transliterieren