Cruz: Module

Hallo!

Und schon wieder das leidige Thema der Perl Module. Ich weiß nicht warum, aber irgendwie will keiner so richtig eine Antwort darauf geben was es mit den Dingern auf sich hat. Ich wurde schon mehrmals aud die Documentation verwiesen und ich war da auch schon oft. Ich klicke da auf Perl Module, und werde erstmal mit einer Intro konfrontiert, die mir wirklich überhaupt nichts sagt. Darunter sind alle Module aufgelistet mit links zu Namen, die sie entwickelt haben..toll auch sehr hilfreich.

Könnte sich nicht endlich mal jemand erbarmen und sich ein paar Minuten Zeit nehmen?

Also..ich habe mir folgenden Teil  aus einem Quelltext geklaut, um zu versuchen zu verstehen wie es funktioniert. Ich glaube das CGI Modul ist wohl das einfachste.

use CGI qw(:standard);

Hiermit kann man wohl so ein Modul quasi initialisieren richtig? Was bedeutet qw(:standard);?

$q=new CGI;

Das hier sagt mir nicht so viel..hier wird wohl irgendwie eine Variable q definiert, die irgendwie mit dem Modul verknüpft ist.

$Name=$q->param('name');  
$Contact=$q->param('contact');
$Phone=$q->param('phone');  
$Fax=$q->param('fax');
$Address=$q->param('address');  
$Apartment=$q->param('apartment');
$City=$q->param('city');  
$ZIP=$q->param('zip');

Ok das leuchtet mir etwas ein...in (" ") stehen die namen der input fields, die dann in die Variablen $Name, $Contact usw abgelegt werden korrekt? und mit $q->param übernimmt man sie erstmal in q richtig?

Ok..was kann das CGI Module noch? Oder wie verwende ich z.B. das mySQL Modul?

Ich wäre dankbar für jede Hilfe!

Dank und Gruß
Cruz

  1. hast Du auch eine Windoof maschine? Wenn ja, dann geh doch mal zur
    < http://www.activestate.com/>
    und lade Dir das Perl für Windoof. Dort hast Du dann HTML-aufbereitete Pages. Ansonsten hast Du unter U*x (also auch Linux) zu jedem Modul entsprechende man pages (ggf. mußt Du diese aus den POD beschreibungen der Module heraus generieren - der Befehl ist glaub' ich pod2man .. außerdem gibt's auch pod2html).

    Außerdem empfehle ich Dir, mal mit etwas Muße auf die Page
    < http://www.perl.com/pub/v/documentation> zu gehen und zu schmökern.

    Unter
    < http://www.perl.com/CPAN-local/README.html>
    findest Du die Doku zum CPAN

    Zu Deinem aktuellen Problem mit dem CGI Modul: mach' doch einfach mal cgi.pm in einem Editor auf und lese dort die POD ("plain old documentation") - es steht alles drin, was Du brauchst.

    Außerdem - wegen "Darunter sind alle Module aufgelistet mit links zu Namen, die sie entwickelt haben..toll auch sehr hilfreich.":
    {Link: http://www.perl.com/CPAN-local/modules/00modlist.long.html#Part2-ThePerl5Mo]

    Mag sein, daß diese Antwort zu sehr nach RTFM klingt .. aber um Doku lesen kommt man imho nun mal nicht rum ...

    Ich hoffe, ich konnte Dir wenigstens °etwas° helfen.

    Ciao
      K@rl

  2. Also..ich habe mir folgenden Teil  aus einem Quelltext geklaut, um zu versuchen zu verstehen wie es funktioniert. Ich glaube das CGI Modul ist wohl das einfachste.
    use CGI qw(:standard);
    Hiermit kann man wohl so ein Modul quasi initialisieren richtig?

    "verwenden" wäre der bessere Ausdruck.
    Perl sucht (über @INC) nach diesem Modul und "bindet ihn ein". Damit kann man Zeug verwenden, das in diesem Modul bereitgestellt wird (vor allem Variablen und Funktionen).
    Falls der Modul selbst Initialisierungscode enthält, wird dieser nun ausgeführt.

    $q=new CGI;
    Das hier sagt mir nicht so viel..hier wird wohl irgendwie eine Variable q definiert, die irgendwie mit dem Modul verknüpft ist.

    Es wird ein CGI-Objekt gebaut, welches Komponenten  (Teilvariablen) und Methoden (Funktionen) besitzt. Dabei wird die gesamte CGI-Eingabe (egal, welche Variante) geparst.

    »»  $ZIP=$q->param('zip');

    Ok das leuchtet mir etwas ein...in (" ") stehen die namen der input fields, die dann in die Variablen $Name, $Contact usw abgelegt werden korrekt? und mit $q->param übernimmt man sie erstmal in q richtig?

    Ganz im Gegentum, man holt sie aus den Komponenten des Objektes heraus und speichert sie in "normalen", skalaren Variablen. (Das ist dann später ggf. besser lesbar - nötig wäre es nicht.)

    Ok..was kann das CGI Module noch?

    Dazu muß auch ich ein herzliches RTFM loswerden ... ;-)

    Oder wie verwende ich z.B. das mySQL Modul?

    Hm, wieviel SQL kannst Du denn schon?

    1. Hm, wieviel SQL kannst Du denn schon?

      Naja...den SELECT Befehl beherrsche ich wohl soweit..und ansonsten ist SQL extrem leicht und es gibt zu überhauf Anleitungen.

      Kannst du mir einen Beispiel angeben, wie ich mit Hilfe des mySQL Moduls aus einer mySQL Datenbank, name: Kunden, pass: passwort, Tabelle: Kunden, Spalte: Namen alle Namen die mit einem A anfangen ein einen Array kriege?

      Das wäre echt gigantisch.

      Dank und Gruß
      Cruz

      1. Kannst du mir einen Beispiel angeben, wie ich mit Hilfe des mySQL Moduls aus einer mySQL Datenbank, name: Kunden, pass: passwort, Tabelle: Kunden, Spalte: Namen alle Namen die mit einem A anfangen ein einen Array kriege?

        Hm, Deine Syntaxnotation ist nicht wirklich SQL-artig ... falls Du meintest, bestimmte Spalten aus einer Tabelle zu holen, bei der in einer bestimmten Spalte Werte drin sind, die mit einem "A" anfangen, heißt das in SQL sinngemäß:

        SELECT <feldliste> FROM <tabellenname>
          WHERE <feld> LIKE "A%";

        Für die in <...> genannten Stellen mußt Du jetzt noch Deine Namen einsetzen.

        Die Pattern-Matching-Fähigkeiten von normalem SQL sind allerdings bescheiden. (Außerdem ist "LIKE" langsam, weil es Indexzugriffe abwürgt ...)

        1. SELECT <feldliste> FROM <tabellenname>
            WHERE <feld> LIKE "A%";

          Ja gut, das wäre jetzt die reine SQL Anweisung. Worum es mir wirklich geht ist die Umsetzung in Perl.  Wie kriege ich die Dinger in ein @rray?

          Danke für die Mühe
          Cruz

          1. Hallo Cruz

            Ja gut, das wäre jetzt die reine SQL Anweisung. Worum es mir wirklich geht ist die Umsetzung in Perl.  Wie kriege ich die Dinger in ein @rray?

            Durch die Verwendung eines weiteren Moduls ;-)))

            Nämlich mit dem allgemeinen Datanbank-Modul 'DBI.pm' (DataBase Interface) und dem speziellen Datenbank-Treiber 'MySql.pm' (wenn ich mich nicht irre, im Verzeichnis DBD, für DataBase Driver). Sollte in Perl ab 5.0 installiert sein.

            Mehr zur Installation im Archiv unter "DBI".

            Mit den DBI-Befehlen kannst Du die Datenquelle intialisieren ('DBI->connect()'), das SQL-Statement absetzen ($dbHandle->prepare($SQLStatement) und $stHandle->execute) und  das Recordset als Referenz zu einem Array (alle Records) mit den Refenzen zu weiteren Arrays (mit den Columns)  ($RSet_ref = $stHandle->fetchall_arrayref) auslesen.

            Grüsse
            Tom

  3. hi!

    Perl-Module sind einfach von anderen geschriebene Codeabschnitte, die nützliche und immer wieder gebrauchte Funktionen zur Verfügung stellen, die man - ohne die genaue Implementierung zu kennen - in seinen eigenen Programmen verwenden kann. Module sind also etwa das gleiche wie Units unter Pascal oder Bibliotheken unter C/C++.

    use CGI qw(:standard);
    Hiermit kann man wohl so ein Modul quasi initialisieren richtig?

    Eigentlich wird der Quelltext eines Moduls (anders als in C/C++ oder Pascal liegen in Perl die Module im Quelltext vor und werden *vor* dem Kompilieren mit deinem eigenen Code verbunden) einfach an der entsprechenden Stelle in deinem Perl-Programm eingefügt. "use" hat dabei allerdings noch einige Besonderheiten, zb. die von Michael angesprochene Möglichkeit zu Initialisierungen innerhalb des Moduls etc.

    $q=new CGI;
    Das hier sagt mir nicht so viel..hier wird wohl irgendwie eine Variable q definiert, die
    irgendwie mit dem Modul verknüpft ist.

    Das ist Objektorientierung in Perl: CGI ist in etwa eine Klasse und $q eine Instanz dieser Klasse.

    »»  $Name=$q->param('name');  
    [...]

    Ok das leuchtet mir etwas ein...in (" ") stehen die namen der input fields, die dann in die
    Variablen $Name, $Contact usw abgelegt werden korrekt? und mit $q->param übernimmt
    man sie erstmal in q richtig?

    param() ist eine Elementfunktion der "Klasse" CGI, also kannst du sie über die Klasseninstanz $q aufrufen. In C++ würde dort statt des "->" ein einfacher Punkt stehen (wobei $q in Perl wohl eher so eine Art Pointer auf eine dynamisch angelegte Klasseninstanz darstellen soll - vergleiche auch das new - und in dem Fall die Syntax in C++ wieder genauso wäre).
    param() liefert den Wert des angegebenen Formularfeldes. Dabei übernimmt es die Werte aus $q (bzw. der von $q referenzierten Instanz).

    Ok..was kann das CGI Module noch? Oder wie verwende ich z.B. das mySQL Modul?

    perldoc CGI
    perldoc DBD::mySQL

    bye, Frank!

    ps. Meine Ausführungen oben kommen mir beim nochmaligen Durchlesen etwas wirr vor. Ich hoffe, du konntest mir trotzdem einigermaßen folgen ;)

  4. Hallo!

    Als weitere Lektuere kann ich noch Eike Grotes Perl-Einfuehrung empfehlen. http://www.phy.uni-bayreuth.de/~btpa25/perl/perl_inhalt.html Die letzten drei Kapitel beschaftigen sich mit diesem Thema (abgesehen von "Buecher" und "Index"). Dort ist zwar nicht alles enthalten, was Du hier gefragt hast, jedoch ist das Wesen der Packages dort ganz nett erklaert, was Dir beim Verstaendnis dieser Dinge sicher hilft. Also dann les mal, ist gar nicht mal sehr lang.

    Calocybe