archive-de.com » DE » E » EKIWI.DE

Total: 422

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • SELFHTML: Perl / Perl-Sprachelemente / Schleifen
    Jetztzeit durch den time Aufruf einen Wert zugewiesen bekommt der größer ist als Endzeit Dann wird die Schleife beendet Wie oft das der Fall ist wissen Sie natürlich vorher nicht insofern ist die while Schleife hier ideal Innerhalb der Schleife wird außerdem noch i als Zählervariable mit i jeweils um 1 erhöht Der aktuelle Wert von i wird nach Ablauf der Schleife ausgegeben Im Fenster des aufrufenden Browsers wird man also am Ende sehen können wie oft die Schleife durchlaufen wurde do Schleifen Bei while Schleifen kann es passieren dass die abhängigen Anweisungen nie ausgeführt werden nämlich dann wenn die Schleifenbedingung schon beim ersten Schleifendurchlauf unwahr ist Eine do Schleife sorgt dafür dass die Anweisungen auf jeden Fall einmal ausgeführt werden da die Bedingung der Schleife erst am Ende abgeprüft wird Beispiel eines vollständigen CGI Scripts in Perl Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Testausgabe title n print head body n my Bedingung Abbruch my Irgendwas do Irgendwas Bedingung print Hier steht Irgendwas until Irgendwas eq Bedingung print body html n Erläuterung Das Beispiel demonstriert die typische Funktionsweise einer solchen Schleife Zunächst wird ein Skalar Bedingung mit dem Anfangswert Abbruch versehen Ein weiterer Skalar namens Irgendwas wird deklariert erhält aber keinen Wert Die Schleife wird mit do eingeleitet Dahinter folgt in geschweiften Klammern ein Anweisungsblock der beliebig viele Anweisungen enthalten kann Im Beispiel wird dem Skalar Irgendwas gleich zu Beginn der Wert von Bedingung zugewiesen also Abbruch Anschließend wird dieser Inhalt zur Kontrolle ausgegeben Nach der schließenden geschweiften Klammer die den Anweisungsblock beendet ist das Wort until notiert und dahinter in Klammern die eigentliche Schleifenbedingung Im Beispiel wird abgeprüft ob Irgendwas und Bedingung gleich sind also den gleichen Inhalt haben Da dies ja innerhalb der Schleife zugewiesen wurde ist die Schleifenbedingung also erfüllt Damit wird die Schleife abgebrochen Denn until ist wie solange bis zu lesen Im Gegensatz zur while Schleife deren Anweisungsblock ausgeführt wird solange die Bedingung wahr ist wird hier der Anweisungsblock ausgeführt bis die Schleifenbedingung wahr ist Im Beispiel wird die Schleife einmal durchlaufen obwohl die Schleifenbedingung gleich im ersten Durchlauf wahr ist Der Grund ist eben dass zuerst der abhängige Code ausgeführt und erst dann die Bedingung überprüft wird Beachten Sie do Schleifen sind eigentlich keine echten Schleifen weshalb dort Sprungbefehle wie last next und redo nicht funktionieren Es gibt in Perl auch do Schleifen deren Bedingung kein until sondern ein while vorangestellt ist Dann müssen Sie die Schleifenbedingung negativ formulieren Schleifen bei Hashes So wie sich Arrays prima mit foreach Schleifen traversieren also Element für Element durchlaufen lassen besteht dieser Wunsch natürlich auch bei Hashes Da ein Hash Element jedoch immer aus zwei Werten besteht von denen der erste der Schlüssel ist und der zweite der eigentliche Datenwert ist ein einfaches Traversieren wie

    Original URL path: http://html.ekiwi.de/perl/sprache/schleifen.htm (2016-04-25)
    Open archived version from archive


  • SELFHTML: Perl / Perl-Sprachelemente / Bedingte Anweisungen
    weitere Bedingungen formuliert werden Abgeprüft werden diese Bedingungen aber erst wenn alle unmittelbar voranstehenden Bedingungen unwahr waren Das zweite elsif im Beispiel wird also nur dann überhaupt von Perl bewertet wenn Daten übergeben wurden und wenn diese nicht weniger als 4 Zeichen enthalten Die beiden elsif Bedingungen im Beispiel vergleichen wieder zwei Werte nämlich die Länge der übergebenen Daten ermittelt mit der Funktion length mit einer jeweils festen Zahl Erst wenn alle if und elsif Bedingungen unwahr sind wird der else Zweig ausgeführt Dieser braucht keine Bedingung mehr sondern bedeutet einfach den Ansonsten Fall Da im obigen Beispiel die zuvor notierten Bedingungen Fehler abfangen steht dort im else Zweig der Code für den Gutfall Die Daten werden zur Kontrolle ausgegeben verschlüsselt und dann in verschlüsselter Form nochmals ausgegeben Beachten Sie Die geschweiften Klammern nach einem if elsif oder else müssen immer notiert werden auch dann wenn nur eine einzige Anweisung darin notiert wird Dies ist in Perl anders als in manchen anderen Sprachen etwa in JavaScript Bedingte Anweisungen mit unless Bedingungen können auch andersherum formuliert werden Beispiel eines vollständigen CGI Scripts Anzeigebeispiel So sieht s aus ohne Übergabeparameter Anzeigebeispiel So sieht s aus mit dem String strenggeheim als Übergabeparameter Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Testausgabe title n print head body n unless ENV QUERY STRING eq strenggeheim print b Keine Erlaubnis b n else open FH usr bin apache conf httpd conf my Dateizeilen FH close FH print h1 Aktuelle Konfiguration des Apache Servers h1 n print pre Dateizeilen pre n print body html n Erläuterung Das Script formuliert mit unless eine Wenn nicht Bedingung Innerhalb der Bedingung wird verglichen ob die Umgebungsvariable QUERY STRING den Wert strenggeheim hat Die Bedingung ist also wahr wenn der Anwender im Browser das Script beispielsweise mit http localhost cgi bin show apache pl strenggeheim aufgerufen hat Durch unless wird die Bedingung jedoch als Ganzes verneint Anweisungen die in dem Anweisungsblock stehen der in den geschweiften Klammern abhängig von unless ausgeführt wird wird im Beispiel nur dann ausgeführt wenn der Anwender das Script nicht mit dem Übergabeparameter strenggeheim aufgerufen hat In diesem Fall gibt das Script eine Fehlermeldung aus und überspringt den else Zweig Hat der Anwender den richtigen Übergabeparameter eingegeben gelangt das Script dagegen in den else Zweig Dort liest es die zentrale Konfigurationsdatei des Apache Webservers ein und gibt deren Inhalt im Browser aus Die dabei verwendeten Perl Funktionen sind open und close Nachgestellte Bedingungen Um eine einzelne Anweisung abhängig von einer Bedingung auszuführen erlaubt Perl auch eine besondere etwas kürzere Form von Bedingungen Beispiel eines vollständigen CGI Scripts Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser my Datumzeit localtime time my Stunden Datumzeit 2 print Content

    Original URL path: http://html.ekiwi.de/perl/sprache/bedingt.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Funktionsreferenz / Funktionen für Informationen aus Konfigurationsdateien
    springt dann ans Ende der Datei endservent zum Ende von etc services springen Springt an das Ende der Datei etc services und beendet den Zugriff darauf Erwartet keine Parameter Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Wert getservent print Wert n endservent print pre body html n Erläuterung Das Beispiel ermittelt mit getnetent den ersten Eintrag aus etc services gibt den ermittelten Wert aus und springt dann ans Ende der Datei getgrent nächsten Eintrag von etc groups ermitteln Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei etc group oder den Listenkontext einer Liste mit vier Elementen Erwartet keine Parameter Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück Bei Dateiende wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Liste getgrent while Liste print Liste 0 Liste 1 Liste 2 Liste 3 n Liste getgrent print pre body html n Erläuterung Das Beispiel zeigt wie Sie alle Einträge der Datei etc groups mit einem CGI Script ausgeben lassen können Zunächst wird getgrent erstmals aufgerufen Der Rückgabewert wird als Listenkontext interpretiert und im Array Liste gespeichert Solange die Liste einen Inhalt enthält while Liste werden die vier Elemente des Arrays ausgegeben und getgrent wird für den nächsten Schleifendurchgang aufgerufen Die vier Elemente des Arrays die von der Funktion zurückgegeben werden sind Liste 0 Name der Berechtigungsgruppe Liste 1 Passwort der Berechtigungsgruppe verschlüsselt Liste 2 Nummer der Berechtigungsgruppe GID Liste 3 Mitgliedernamen der Berechtigungsgruppe getgrgid Eintrag mit bestimmter Gruppen ID aus etc groups ermitteln Ermittelt aus der Datei etc group den zugehörigen Eintrag zu einer bestimmten Gruppen ID GID Im skalaren Kontext wird dabei der zugehörige Gruppenname ermittelt im Listenkontext der gesamte Eintrag zur GID Erwartet als Parameter 1 die gewünschte GID Gibt je nach Kontext entweder den Gruppennamen oder die Liste zurück Wenn die angegebene GID nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body n Name Passwort Gid Mitglieder getgrgid 2 print h3 Listenkontext h3 print pre Name n GrPasswort n Gid n Mitglieder pre print h3 Skalarer Kontext h3 pre my Wert getgrgid 2 print pre Wert pre n print body html n Erläuterung Das Beispiel ruft insgesamt zweimal die Funktion getgrgid auf zuerst im Listenkontext später im skalaren Kontext In beiden Fällen wird 2 als gesuchte Gruppennummer GID übergeben Im Listenkontext wird der gesamte gefundene Eintrag bestehend aus Gruppenname Gruppenpasswort verschlüsselt Gruppennummer und Mitgliedernamen vom Script ausgegeben Im skalaren Kontext wird nur der zur Gruppennummer gehörige Gruppenname ausgegeben getgrnam Eintrag mit bestimmtem Gruppennamen aus etc groups ermitteln Ermittelt aus der Datei etc group den zugehörigen Eintrag zu einem bestimmten Gruppennamen Im skalaren Kontext wird dabei die Gruppen ID GID des angegebenen Namens ermittelt im Listenkontext der gesamte Eintrag zu dem Gruppennamen Erwartet als Parameter 1 den gewünschten Gruppennamen Gibt je nach Kontext entweder die zugehörige Gruppennummer GID oder die Liste zurück Wenn der angegebene Gruppenname nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body n my Name my Passwort my Gid my Mitglieder getgrnam mail print h3 Listenkontext h3 print pre Name n Passwort n Gid n Mitglieder pre print h3 Skalarer Kontext h3 my Wert getgrnam mail print pre Wert pre n print body html n Erläuterung Das Beispiel ruft insgesamt zweimal die Funktion getgrnam auf zuerst im Listenkontext später im skalaren Kontext In beiden Fällen wird mail als gesuchter Gruppenname übergeben Im Listenkontext wird der gesamte gefundene Eintrag bestehend aus Gruppenname Gruppenpasswort verschlüsselt Gruppennummer und Mitgliedernamen vom Script ausgegeben Im skalaren Kontext wird nur die zum Gruppennamen gehörige Gruppennummer GID ausgegeben gethostbyaddr Eintrag mit bestimmter IP aus etc hosts ermitteln Ermittelt aus der Datei etc hosts den Hostnamen zu einer bestimmten IP Adresse Erwartet als Parameter 1 die gewünschte IP Adresse und zwar numerisch in binärer Schreibweise 2 den Adresstyp der IP Adresse numerisch Gibt den zugehörigen Hostnamen zurück Wenn die angegebene IP Adresse nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n use Socket my addr inet aton 127 0 0 1 my Wert gethostbyaddr addr AF INET print Wert n print pre body html n Erläuterung Das Beispiel zeigt wie Sie den Hostnamen zu einer IP Adresse auf dem Rechner ermitteln können Um die etwas komplizierte Parameterversorgung der Funktion gethostbyaddr sicherzustellen wird das Standardmodul Socket verwendet Durch Aufruf der Modul Funktion inet aton wird eine in üblicher Schreibweise notierte übergebene IP Adresse in die erforderliche binäre Form umgewandelt Das Ergebnis wird in dem Skalar addr gespeichert Das Modul Socket stellt auch Konstanten für den Adresstyp zur Verfügung Die korrekte Konstante für den zweiten Parameter von gethostbyaddr ist AF INET Durch Übergabe von addr und AF INET wird gethostbyaddr richtig versorgt und gibt den Hostnamen zur Beispieladresse 127 0 0 1 aus üblicherweise localhost gethostbyname Eintrag mit bestimmtem Hostnamen aus etc hosts ermitteln Ermittelt aus der Datei etc hosts die IP Adresse zu einem bestimmten Hostnamen Erwartet als Parameter 1 den gewünschten Hostnamen Gibt die zugehörige IP Adresse zurück allerdings binär numerisch Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n use Socket my addr gethostbyname localhost my Wert inet ntoa addr print Wert print pre body html n Erläuterung Das Beispiel zeigt wie Sie die IP Adresse zu einem Hostnamen auf dem Rechner ermitteln können Dazu wird das Standardmodul Socket verwendet Damit lässt sich der binär numerische Rückgabewert von gethostbyname der im Beispiel in dem Skalar addr gespeichert wird bequem in die übliche Schreibweise konvertieren Durch Aufruf der Modul Funktion inet ntoa wird addr in die übliche Schreibweise umgewandelt Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar Wert gespeichert Anschließend wird die IP Adresse zu dem Hostnamen localhost ausgegeben üblicherweise 127 0 0 1 gethostent nächsten Eintrag von etc hosts ermitteln Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei etc hosts oder im Listenkontext eine Liste mit fünf und mehr Elementen Erwartet keine Parameter Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück Bei Dateiende wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Liste gethostent while Liste print Liste 0 Liste 1 Liste 2 for my i 0 i Liste 3 i my a my b my c my d unpack C4 Liste 4 i print a b c d print n Liste gethostent print pre body html n Erläuterung Das Beispiel zeigt wie Sie alle Einträge der Datei etc hosts mit einem CGI Script ausgeben lassen können Zunächst wird gethostent erstmals aufgerufen Der Rückgabewert wird als Listenkontext interpretiert und im Array Liste gespeichert Solange die Liste einen Inhalt enthält while Liste werden die Elemente der Liste ausgegeben und getgrent wird für den nächsten Schleifendurchgang aufgerufen Die Liste enthält als letztes Listenelement wiederum eine Liste sodass eine weitere innere for Schleife nötig ist um alle Elemente zu ermitteln Die Elemente der Liste die von der Funktion zurückgegeben wird sind Liste 0 Hostname Liste 1 Aliasnamen des Hostnamens Liste 2 Adresstyp Liste 3 Anzahl der noch folgenden Listenelemente Liste 4 und weitere zugeordnete IP Adressen Die zugeordneten IP Adressen sind binär gespeichert Um die übliche Vier Zahlen Darstellung zu erhalten muss die binäre Schreibweise erst konvertiert werden Das ist durch Anwendung der Funktion unpack mit C4 als erstem Parameter möglich so wie im obigen Beispiel Dort werden auf diese Weise die vier Einzelzahlen der IP Adresse ermittelt und in den Skalaren a b c und d gespeichert getlogin Namen des aktuellen Benutzers ermitteln Erwartet keine Parameter Gibt den Loginnamen des aktuellen Benutzers zurück Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Wert getlogin print Wert n print pre body html n Erläuterung Das Beispiel ermittelt den Loginnamen mit getlogin speichert ihn in dem Skalar Wert und gibt diesen zur Kontrolle aus getnetbyaddr Eintrag mit bestimmter IP aus etc networks ermitteln Ermittelt aus der Datei etc networks den Netzwerknamen zu einer bestimmten IP Adresse Erwartet als Parameter 1 die gewünschte IP Adresse und zwar numerisch in binärer Schreibweise 2 den Adresstyp der IP Adresse numerisch Gibt den zugehörigen Netzwerknamen zurück Wenn die angegebene IP Adresse nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n use Socket my addr inet aton 127 0 0 0 my Wert getnetbyaddr addr AF INET print Wert n print pre body html n Erläuterung Das Beispiel zeigt wie Sie den Netzwerknamen zu einer IP Adresse auf dem Rechner ermitteln können Um die etwas komplizierte Parameterversorgung der Funktion getnetbyaddr sicherzustellen wird das Standardmodul Socket verwendet Durch Aufruf der Modul Funktion inet aton wird eine in üblicher Schreibweise notierte übergebene IP Adresse in die erforderliche binäre Form umgewandelt Das Ergebnis wird in dem Skalar addr gespeichert Das Modul Socket stellt auch Konstanten für den Adresstyp zur Verfügung Die korrekte Konstante für den zweiten Parameter von gethostbyaddr ist AF INET Durch Übergabe von addr und AF INET wird getnetbyaddr richtig versorgt und gibt den Netzwerknamen zur Beispieladresse 127 0 0 0 aus üblicherweise loopback getnetbyname Eintrag mit bestimmtem Netzwerknamen aus etc networks ermitteln Ermittelt aus der Datei etc networks die IP Adresse zu einem bestimmten Netzwerknamen Erwartet als Parameter 1 den gewünschten Netzwerknamen Gibt die zugehörige IP Adresse zurück allerdings binär numerisch Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n use Socket my addr getnetbyname loopback my Wert inet ntoa addr print Wert print pre body html n Erläuterung Das Beispiel zeigt wie Sie die IP Adresse zu einem Netzwerknamen auf dem Rechner ermitteln können Dazu wird das Standardmodul Socket verwendet Damit lässt sich der binär numerische Rückgabewert von getnetbyname der im Beispiel in dem Skalar addr gespeichert wird bequem in die übliche Schreibweise konvertieren Durch Aufruf der Modul Funktion inet ntoa wird addr in die übliche Schreibweise umgewandelt Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar Wert gespeichert Anschließend wird die IP Adresse zu dem Netzwerknamen loopback ausgegeben üblicherweise 127 0 0 0 getnetent nächsten Eintrag von etc networks ermitteln Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei etc networks oder im Listenkontext eine Liste mit vier Elementen Erwartet keine Parameter Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück Bei Dateiende wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Liste getnetent while Liste print Liste 0 Liste 1 Liste 2 Liste 3 n Liste getnetent print pre body html n Erläuterung Das Beispiel zeigt wie Sie alle Einträge der Datei etc networks mit einem CGI Script im Browser ausgeben können Zunächst wird getnetent erstmals aufgerufen Der Rückgabewert wird als Listenkontext interpretiert und im Array Liste gespeichert Solange die Liste einen Inhalt enthält while Liste werden die vier Elemente der Liste ausgegeben und getnetent wird für den nächsten Schleifendurchgang aufgerufen Die vier Elemente der Liste die von der Funktion zurückgegeben wird sind Liste 0 Name des Netzwerks Liste 1 Aliasnamen des Netzwerks Liste 2 Adresstyp Liste 3 Nummer des Netzwerks getprotobyname Eintrag mit bestimmtem Protokollnamen aus etc protocols ermitteln Ermittelt aus der Datei etc protocols die Protokollnummer zu einem bestimmten Protokollnamen Erwartet als Parameter 1 den gewünschten Protokollnamen Gibt die zugehörige Protokollnummer zurück Wenn der übergebene Protokollname nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Wert getprotobyname tcp print Wert n print pre body html n Erläuterung Das Beispiel ermittelt die Protokollnummer zum Protokoll tcp Dazu dient der Aufruf getprotobyname tcp dessen Rückgabewert im Skalar Wert gespeichert wird Zur Kontrolle wird der Wert ausgegeben getprotobynumber Eintrag mit bestimmter Protokollnummer aus etc protocols ermitteln Ermittelt aus der Datei etc protocols den Protokollnamen zu einer bestimmten Protokollnummer Erwartet als Parameter 1 die gewünschte Protokollnummer Gibt den zugehörigen Protokollnamen zurück Wenn die übergebene Protokollnummer nicht gefunden wurde wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Wert getprotobynumber 17 print Wert n print pre body html n Erläuterung Das Beispiel ermittelt den Protokollnamen zur Protokollnummer 17 Dazu dient der Aufruf getprotobynumber 17 dessen Rückgabewert im Skalar Wert gespeichert wird Zur Kontrolle wird der Wert ausgegeben getprotoent nächsten Eintrag von etc protocols ermitteln Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei etc protocols oder im Listenkontext eine Liste mit drei Elementen Erwartet keine Parameter Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück Bei Dateiende wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Liste getprotoent while Liste print Liste 0 Liste 1 Liste 2 n Liste getprotoent print pre body html n Erläuterung Das Beispiel zeigt wie Sie alle Einträge der Datei etc protocols mit einem CGI Script ausgeben lassen können Zunächst wird getprotoent erstmals aufgerufen Der Rückgabewert wird als Listenkontext interpretiert und im Array Liste gespeichert Solange die Liste einen Inhalt enthält while Liste werden die vier Elemente der Liste ausgegeben und getnetent wird für den nächsten Schleifendurchgang aufgerufen Die drei Elemente der Liste die von der Funktion zurückgegeben wird sind Liste 0 Protokollname Liste 1 Protokollnummer Liste 2 Aliasname des Protokolls getpwent nächsten Eintrag von etc passwd ermitteln Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei etc passwd oder im Listenkontext eine Liste mit bis zu neun Elementen Erwartet keine Parameter Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück Bei Dateiende wird undef zurückgegeben Beispiel eines vollständigen CGI Scripts in Perl usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body pre n my Liste getpwent while Liste print Liste 0 Liste 1 Liste 2 Liste 3 Liste 4 Liste 5 Liste 6 Liste 7 Liste 8 n Liste getpwent print pre body html n Erläuterung Das Beispiel zeigt wie Sie alle Einträge der Datei etc passwd mit einem CGI Script ausgeben lassen können Zunächst wird getpwent erstmals aufgerufen Der Rückgabewert wird als Listenkontext interpretiert und im Array Liste gespeichert Solange die Liste einen Inhalt enthält while Liste werden die neun Elemente der Liste ausgegeben und getpwent wird für den nächsten Schleifendurchgang aufgerufen Die neun Elemente der Liste die von der Funktion zurückgegeben wird sind Liste 0 Benutzername Liste 1 Benutzerpasswort verschlüsselt Liste 2 Benutzernummer UID Liste 3 Nummer der zugehörigen Berechtigungsgruppe GID Liste 4 beschreibende Angaben Liste 5 beschreibende Angaben Liste 6 Heimatverzeichnis des Benutzers Liste 7 Shell des Benutzers Liste 8 optional Verfallszeitpunkt der Gültigkeit des Eintrags getpwnam Eintrag mit bestimmtem Benutzernamen aus etc passwd ermitteln Ermittelt zu einem bestimmten Benutzernamen den Eintrag aus der Datei etc passwd den zugehörigen Eintrag Im skalaren Kontext wird die Benutzernummer UID ermittelt im Listenkontext eine Liste mit bis zu neun Elementen Erwartet als Parameter 1 den gewünschten Benutzernamen Gibt im skalaren Kontext die zugehörige Benutzernummer UID und im Listenkontext

    Original URL path: http://html.ekiwi.de/perl/funktionen/konfiguration.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Funktionsreferenz / Funktionen für Datum und Uhrzeit
    Monatstag Monatstag Stunden Stunden 10 Stunden 0 Stunden Stunden Minuten Minuten 10 Minuten 0 Minuten Minuten Sekunden Sekunden 10 Sekunden 0 Sekunden Sekunden Jahr 1900 my Wochentage Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag my Monatsnamen Januar Februar M auml rz April Mai Juni Juli August September Oktober November Dezember print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test Ausgabe title head body n print Datum Variante 1 Wochentage Wochentag der Monatstag Monat Jahr br n print Datum Variante 2 Wochentage Wochentag der Monatstag Monatsnamen Monat Jahr br n print Uhrzeit Variante 1 Stunden Minuten Uhr br n print Uhrzeit Variante 2 Stunden Minuten Sekunden Uhr br n print Der heutige Tag ist der Jahrestag Tag im laufenden Jahr br n print Als CTIME Ausgabe lautet dieser Zeitpunkt CTIME String br n Sommerzeit print Es ist Sommerzeit n print Es ist Normalzeit keine Sommerzeit n print body html n Erläuterung Das Beispiel ermittelt die Zeitangaben des aktuellen Zeitpunkts und zwar einmal im Listenkontext erster Aufruf von localtime und einmal im skalaren Kontext zweiter Aufruf Anschließend bereitet das Script die ermittelten Daten für die Ausgabe auf Denn die zurückgegebenen Werte sind in vielen Fällen eher Rohdaten die für eine ordentliche Ausgabe noch nachbehandelt werden müssen Die Werte für Monat und Jahrestag werden zunächst um 1 erhöht da der Rückgabewert intern bei 0 zu zählen beginnt für Monate gelten anfangs die Monatsnummern 0 bis 11 und nicht 1 bis 12 Dann werden diverse Angaben so formatiert dass sie eine führende 0 erhalten falls der Wert kleiner als 10 ist Denn eine Uhrzeitangabe wie 8 1 ist wohl kaum erwünscht es soll schließlich 08 01 ausgegeben werden Erreicht wird dies mit Hilfe einer einfachen Entweder Oder Abfrage Die

    Original URL path: http://html.ekiwi.de/perl/funktionen/datumzeit.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Perl-Sprachelemente / Zahlen
    ist offensichtlich dass bei der zweiten Ausgabe ein paar Stellen hinter dem Komma dran glauben mussten Es gibt jedoch das Standardmodul Math das Perl befähigt potentiell beliebig große und kleine Zahlen darzustellen und damit zu rechnen Beispiel eines vollständigen CGI Scripts in Perl Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser use Math BigInt use Math BigFloat my x Math BigInt new 12345678901234567890 my y Math BigFloat new 0 000000000000000001 print Content type text plain n n print x x n print y y n x x 1 y y 0 123456789123456789 print x x n print y y n Erläuterung Das Beispiel Script führt die gleichen Zahlen und Operationen ein wie zuvor aber diesmal bindet es zwei Untermodule von Math ein Mit use Math BigInt wird ein Modul zum Darstellen von und Rechnen mit großen Ganzzahlen eingebunden Mit use Math BigFloat wird ein Modul zum Darstellen von und zum Rechnen mit großen Gleitpunktzahlen eingebunden Um eine Zahl mit diesen Modulen zu erzeugen gehen Sie vor wie gezeigt bei Ganzzahlen notieren Sie Math BigInt new Zahl und bei Gleitpunktzahlen Math BigFloat new Zahl Zur besseren Übersicht dürfen Sie in die Zahl auch Leerzeichen einfügen wie im ersten der obigen Beispiele gezeigt Anschließend können Sie mit den Skalaren denen Sie solche Zahlen zugewiesen haben ganz normal arbeiten Sie können die Werte ausgeben und verändern so wie im Beispiel Das Beispiel erzeugt nun folgende Ausgabe x 12345678901234567890 y 000000000000000001 x 12345678901234567891 y 123456789123456999 Benutzen Sie diese Module jedoch nur bei solchen großen Zahlen denn bei komplexeren Rechenoperationen beanspruchen die so erzeugten Zahlen deutlich mehr Rechenleistung Schreibweisen von Zahlen Gewöhnliche Zahlen können Sie in Perl auch wie gewohnt notieren Zu beachten ist nur dass das Dezimalzeichen

    Original URL path: http://html.ekiwi.de/perl/sprache/zahlen.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Funktionsreferenz / Funktionen für Module und Packages
    kennt das Script nur diejenigen Variablen Subroutinen usw die innerhalb des gleichen Namensraums definiert wurden Ebenso ist es beim vierten mal wo der Namensraum franzoesisch wieder aufgerufen wird Bei Verwendung von use strict wie im Beispiel müssen die Variablen die in den beiden ersten Package Blöcken deklariert werden allerdings explizit global deklariert werden um bei späteren Aufrufen des Packages zur Verfügung zu stehen Um die Deklaration globaler Variablen zu ermöglichen steht das Standardmodul vars zur Verfügung Im Beispiel sehen Sie wie dieses Modul eingesetzt wird Innerhalb eines Packages mit use eingebunden stehen in der Klammer hinter qw alle Variablennamen des aktuellen Packages die global also ohne my davor deklariert werden sollen Perl meckert dann trotz use strict nicht an den Deklarationen Beachten Sie Solange nicht mit package ein spezieller Namensraum aktiviert wird gilt der Default Namensraum von Perl der den Namen main hat require andere Perl Datei ausführen Mit dieser Funktion führen Sie eine beliebige andere Perl Datei aus Das andere Script wird an der Stelle an der der require Aufruf steht ausgeführt Erwartet als Parameter 1 den Namen der einzubindenden Datei gegebenenfalls mit Pfadnamen Normalfall oder eine Zahl die als Versionsnummer interpretiert wird Beispiel Teil 1 vollständiges CGI Script in Perl Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Testausgabe title n print head body n require hallo welt pl print body html n Beispiel Teil 2 Moduldatei hallo welt pl print Hallo Welt 1 Erläuterung Das Beispiel zeigt wie Sie ein herkömmliches Perl Script das seinen Output auf die Standardausgabe schreibt in ein CGI Script einbetten können sodass der Output an den aufrufenden Browser gesendet werden kann Im GGI Script wird mit require hallo welt pl eine andere Perl Datei eingebunden Diese Datei schreibt einfach ein Hallo Welt auf die Standardausgabe Da es jedoch in ein Script eingebunden ist das zuvor den üblichen HTTP Header sendet gelangt der Output als HTML Inhalt zum Browser Beachten Sie Sie können mit require ebenso wie mit use eine Moduldatei mit der Endung pm einbinden In diesem Fall müssen Sie require Modulname angeben Perl sucht dann nach einer Datei namens Modulname pm Auch die Syntax mit ist genauso möglich wie bei use vergleiche dazu den Abschnitt Adressierungs Syntax beim Einbinden von Modulen Eingebundene Perl Dateien müssen am Ende so etwas wie 1 enthalten Dadurch wird sichergestellt dass das Modul oder die Modul Funktion korrekt ausgeführt wird Wenn eine eingebundene Datei Subroutinen enthält können Sie diese so aufrufen als wären sie im aktuellen Perl Script notiert use Modul einbinden Mit dieser Funktion laden Sie ein Perl Modul oder bestimmte Funktionen aus einem solchen Modul in ihr Script und können den entsprechenden Perl Code in Ihrem Script benutzen Erwartet als Parameter 1 den Namen des Moduls Normalfall oder eine Zahl die als Versionsnummer interpretiert

    Original URL path: http://html.ekiwi.de/perl/funktionen/module.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Perl-Module / Hinweise zum Arbeiten mit Modulen
    Verzeichnisse kennen Das folgende einfache Perl Script hilft dabei Beispiel Script zur Ausgabe von INC als CGI Script Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Erlaubte Modulverzeichnisse title n print head body n print h1 Verzeichnisse zum Ablegen von Moduldateien h1 n foreach INC print tt tt br n print body html n Erläuterung Das Script gibt einfach den Inhalt der Liste INC zeilenweise als HTML Code aus Wenn Sie den Code als pl Datei im CGI Verzeichnis abspeichern und die pl Datei von einem Browser anfordern lassen werden die verfügbaren Verzeichnispfade angezeigt In der üblichen Konfiguration ist der letzte Eintrag der Liste ein einzelner Punkt Dies steht für aktuelles Verzeichnis und bewirkt dass der Perl Interpreter nachdem er eine eingebundene Datei in den allgemeinen Verzeichnispfaden nicht gefunden hat im aktuellen Verzeichnis sucht Falls Sie Ihre Moduldatei in keinem der Verzeichnisse ablegen wollen die von INC angeboten werden können Sie sie auch woanders ablegen Dann müssen Sie allerdings vor dem Einbinden einer solchen Moduldatei die Liste INC um den Verzeichnispfad erweitern in dem die Moduldatei liegt Beispiel usr bin perl w use lib httpd docs cgi shared speziell use lib httpd docs cgi shared module print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Erlaubte Modulverzeichnisse title n print head body n print h1 Verzeichnisse zum Ablegen von Moduldateien h1 n foreach INC print tt tt br n print body html n Erläuterung Durch eine Anweisung vom Typ use lib mit anschließender Angabe eines Verzeichnispfades wird dieser Pfad an den Anfang der Liste INC übernommen Das Beispiel Script ist das gleiche CGI Script zur Ausgabe der Pfade von INC wie zuvor In diesem Fall zeigt es dass die so definierten eigenen Pfade mit in die Liste aufgenommen wurden Adressierungs Syntax beim Einbinden von Modulen Module können in einem der Verzeichnisse von INC oder einem Unterverzeichnis davon abgelegt werden Daraus ergeben sich dann die möglichen Formen der Adressierung eines Moduls beim Einbinden mit use oder require Beispiele für Module in einem INC Verzeichnis require Statistik pm require Statistik use Statistik pm use Statistik Erläuterung Alle vier Beispiele zeigen das Einbinden eines Moduls das in einer Datei namens Statistik pm abgelegt ist Die Datei befindet sich direkt in einem der Verzeichnisse die in der Liste INC als mögliche Speicherorte für Module zur Verfügung stehen Für require und use gelten die gleichen Regeln Entweder notieren Sie den vollständigen Dateinamen der Moduldatei in Anführungszeichen Moduldateien sollten die Endung pm haben oder Sie notieren den Dateinamen ohne die Endung pm ohne Anführungszeichen Wenn sich die Datei in einem Unterverzeichnis eines der Verzeichnisse von INC befindet ist die relative Pfadangabe erforderlich Beispiele für Module in Unterverzeichnissen eines INC Verzeichnisses require Berechnungsmodule Statistik pm require Berechnungsmodule Statistik use Berechnungsmodule Statistik pm use Berechnungsmodule Statistik Erläuterung Wieder zeigen alle vier Beispiele das Einbinden eines Moduls Statistik pm Die Datei befindet sich unterhalb eines der INC Verzeichnisse in einem Unterverzeichnis namens Berechnungsmodule In diesem Fall ist allerdings die Syntax ohne Anführungszeichen vorzuziehen Denn wenn Sie mit Anführungszeichen arbeiten müssen Sie die einzubindende Datei mit vollem Namen ansprechen Die Syntax ohne Anführungszeichen kommt dagegen ohne die Dateiendung pm aus Es wird erwartet dass die eingebundene Moduldatei diese Endung hat Die Zeichenfolge die die Verzeichnistrenner symbolisiert also Hierarchien darstellt besteht aus einem doppelten Doppelpunkt Packages und Module So einfach das Konzept der Module in Perl erst einmal klingt es bringt doch ein paar Probleme mit sich Angenommen in Ihrem eigenen Perl Script definieren Sie eine Subroutine namens get data In dem gleichen Script binden Sie ein Modul ein in dessen Code ebenfalls eine Subroutine namens get data definiert ist Damit der Perl Interpreter beim Aufruf von get data weiß welche der beiden Funktionen gemeint ist muss es eine Möglichkeit geben ihm mitzuteilen welche der Funktionen gemeint ist Zu diesem Zweck gibt es in Perl das Konzept der Namensräume Jeder Namensraum stellt ein so genanntes Package engl für Paket dar Jedes Perl Script in dem Sie keine besondere Angabe machen welchen Namensraum welches Package Sie meinen benutzt ein Default Package Es hat den Namen main Beispiel usr bin perl w Ausgabetext Hallo alte Welt print Ausgabetext package NeueWelt Ausgabetext Hallo neue Welt print Ausgabetext package main print Ausgabetext Erläuterung Das Beispiel verdeutlicht den Default Namensraum mit dem Namen main Zunächst wird ein Skalar namens Ausgabetext definiert und mit einem Wert belegt Dieser Wert wird gleich anschließend ausgegeben Da bis zum Ausführungszeitpunkt noch keine weitere Angabe zum Namensraum gemacht wurde befindet sich das Script im Defaultnamensraum main Im zweiten Schritt wird mit Hilfe der Funktion package ein neuer eigener Namensraum mit Namen NeueWelt definiert Unterhalb davon wird wiederum ein Skalar namens Ausgabetext definiert diesmal mit anderem Wert Dieser neue Wert wird wieder ausgegeben Zu diesem Ausführungszeitpunkt existieren nun zwei Skalare namens Ausgabetext nämlich der aus dem Package NeueWelt und der aus dem Default Package main Zur Kontrolle wird im Beispiel wieder auf das Package main umgeschaltet Dazu wird wieder die Funktion package aufgerufen diesmal aber mit dem Defaultnamen main Von den beiden existierenden Skalaren dieses Namens wird nun der im Script zuerst definierte ausgegeben also derjenige der zum Default Namensraum main gehört Der unterste print Aufruf gibt also wieder Hallo alte Welt aus Wie das Beispiel zeigt lässt sich der Namensraum innerhalb einer Scriptdatei also beliebig wechseln Dadurch lässt sich ein hohes Maß an Flexibilität erreichen Von dieser Flexibilität profitieren die Module in Perl Ein Modul kann nämlich durch Anwendung der Package Technik beispielsweise mehrere Objekt Klassen in einer Moduldatei unterbringen oder andere Module die ja auch aus Packages bestehen erweitern auch wenn die Technik zugegebenermaßen etwas unsauber ist Ein einfaches Beispiel soll diesen Zusammenhang verdeutlichen Beispiel Teil 1 Moduldatei Testmodul pm Modultext Dies ist der Inhalt des Skalars Modultext n package Testmodul Text Dies

    Original URL path: http://html.ekiwi.de/perl/module/intro.htm (2016-04-25)
    Open archived version from archive

  • SELFHTML: Perl / Perl-Sprachelemente / Subroutinen
    wenig Variablendeklarationen wie möglich zu haben Denn globale Variablen können tendenziell leichter zu logischen Fehlern im Programmablauf führen da sie nicht so leicht zu kontrollieren sind wie Variablen in begrenzten Subroutinen Das Überschreiben von vordefinierten Perl Funktionen ist ebenfalls möglich Wenn Sie zum Beispiel die Funktionsweise einer vordefinierten Funktion ergänzen möchten definieren Sie einfach eine neue Subroutine mit dem entsprechenden Namen Einige Perl Module machen von dieser Möglichkeit Gebrauch Um auf die ursprüngliche Funktion zuzugreifen setzen Sie einfach ein CORE vor den Namen Subroutinen mit Parametern aufrufen Beim Aufruf können Sie einer Subroutine Daten übergeben die von der Subroutine verarbeitet werden sollen Beispiel eines vollständigen CGI Scripts in Perl Anzeigebeispiel So sieht s aus Zum Aufruf des Scripts ist eine Internet Verbindung erforderlich usr bin perl w use strict use CGI Carp qw fatalsToBrowser print Content type text html n n print DOCTYPE HTML PUBLIC W3C DTD HTML 4 01 Transitional EN n print html head title Test title head body n formatHTML Hallo User h1 formatHTML Dein Browser gibt sich aus als ENV HTTP USER AGENT i print body html n sub formatHTML my Inhalt shift my Format shift print Format Inhalt Format Erläuterung Das Beispiel definiert eine Subroutine namens formatHTML Im oberen Teil des Scripts können Sie sehen wie diese Subroutine aufgerufen wird Mit dem Aufruf formatHTML Hallo User h1 werden der Subroutine zwei Parameter übergeben Denn die Subroutine soll die Aufgabe haben aus einem übergebenen Text und einem übergebenen HTML Elementnamen ein HTML Konstrukt bestehend aus Anfangs Tag Inhalt und End Tag auszugeben Die Subroutine erwartet also zwei Parameter Interessant ist wie sie die Parameter abfragt Dazu benutzt sie einfach die Perl Funktion shift und weist deren Rückgabewert einem Skalar zu Um diese Anweisung zu verstehen ist es wichtig zu wissen dass Parameter die einer Subroutine übergeben werden in der vordefinierten Variablen stehen Diese Variable enthält die Liste aller Parameter die der Subroutine übergeben wurden Der erste Parameter steht dann in 0 der zweite in 1 usw Eleganter ist es jedoch sich die Parameter mit der shift Funktion zu holen Da shift beim Aufruf kein Parameter übergeben wird wendet die Funktion ihre Arbeit automatisch auf die vordefinierte Variable an Die Funktion entfernt das erste Element der Liste und gibt es zurück Durch wiederholtes Aufrufen von shift kann sich eine Subroutine also nach und nach alle Parameter abholen die ihr übergeben wurden Die Subroutine im Beispiel holt sich also den ersten Parameter und speichert ihn in Inhalt und den zweiten in Format Dann erzeugt sie eine print Ausgabe und baut darin das gewünschte HTML Konstrukt zusammen Bei jedem Aufruf aus dem Hauptprogramm bewirkt die Subroutine also eine Ausgabe im Browser mit den übergebenen Parametern Beachten Sie Sie müssen nirgendwo festlegen wie viele und welche Parameter eine Subroutine übergeben bekommen kann Eine Subroutine die nicht weiß wie viele Parameter sie übergeben bekommt kann die übergebene Parameterliste beispielsweise mit einer foreach Schleife in der Form foreach abarbeiten Rückgabewerte bei Subroutinen Subroutinen können Werte zurückgeben Subroutinen die Parameter übergeben bekommen damit

    Original URL path: http://html.ekiwi.de/perl/sprache/subroutinen.htm (2016-04-25)
    Open archived version from archive



  •