ubuntuusers.de

Perl Programm - wo?

Status: Gelöst | Ubuntu-Version: Ubuntu 9.04 (Jaunty Jackalope)
Antworten |

Gary-Technology

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hallo und schönen "Guten Morgen" zusammen

Ich habe bisher online in Perl programmiert. Das heist auf dem Server ist Perl und dieverse Perlmodule installiert. Ausgabemedium war stets der Browser (via SSI).

Nun ist es so, daß ich mir ein eigenes Programm schreiben will -lokal auf meinem Rechner. Dazu brauche ich ... richtig ein Perl!

In der Synaptik Paketverwaltung habe ich gesehen, das dort Perl bereits ein grünes Quadrat hat (Gnome). Heist wohl, daß Perl schon auf Ubuntu drauf ist. Aber wo?

Die Internetscripte habe ich mit dem Texteditor geschrieben. Funktionierte einwandfrei. Würde auch gerne weiterhin mit dem Texteditor arbeiten.

Aber die Ausführung lokal auf meinem PC - wie geht sowas? Muss ich da eventuell die "shebang" (#!/usr/bin/perl -w) abändern?

Und wie kann ich module wie DBD::CSV; meinem System/Perl hinzufügen? Desweiteren hätte ich gerne gewusst, wo hin die Ausgaben und Fehlermeldungen des Perlprogrammes erfolgen.

Bisher war es immer Carp qw(fatalsToBrowser warningsToBrowser); also Fehler und Warnungen auf den Browser abgelenkt.

Danke im Voraus...

Gruß Gary

loh.tar

Anmeldungsdatum:
1. Juli 2005

Beiträge: 674

meine Perlkenntnisse sind zwar äußerst bescheiden, aber ich wage dennoch eine Antwort.

Perl ist, wie Du schon bemerkt hast, eigentlich bei jeder Linux Installation vorhanden. Um Dein Programm zu starten sollte es ausführbar sein (chmod +x). Dann kannst es wie jedes andere Programm aufrufen.

Ausgaben erfolgen wohl auf die Art

print STDERR "Hallo Welt" ;

Das Modul DBD::CSV findet man lt Google im Paket libdbd-csv-perl

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Gary-Technology schrieb:

In der Synaptik Paketverwaltung habe ich gesehen, das dort Perl bereits ein grünes Quadrat hat (Gnome). Heist wohl, daß Perl schon auf Ubuntu drauf ist. Aber wo?

Unter GNU/Linux Distributionen gibt es nicht nur einen Pfad wo ein Programm installiert wird. Sondern es wird in mehrere Pfade verteilt installiert. Die Perl Binary zum ausführen befindet sich aber unter "/usr/bin/perl".

Aber die Ausführung lokal auf meinem PC - wie geht sowas? Muss ich da eventuell die "shebang" (#!/usr/bin/perl -w) abändern?

Besser ist wenn du den Pfad "#!/usr/bin/env perl" nutzt. Wo die Binary "perl" genau liegt kann bei jedem System anders sein. Mit "/usr/bin/env" nutzt du das "perl" binary was vom User auch in der $PATH Variable gefunden wurde. Anstatt "-w" solltest du "use warnings;" nutzen.

Und wie kann ich module wie DBD::CSV; meinem System/Perl hinzufügen?

Entweder über das Packetmanagment oder über cpan selber. In Debian und somit auch Ubuntu werden Module zu 99% nach dem Schema erstellt das vorne dran ein "lib" geschrieben wird, am ende ein "-perl" angehängt und "::" durch "-" ersetzt wird, und alles kleingeschrieben.

Daher aus "DBD::CSV" wird "libdbd-csv-perl". Wenn das nicht gefunden wird musst du "root" Rechte erlangen und den Befehl "cpan" nutzen um Module direkt vom CPAN zu installieren.

Desweiteren hätte ich gerne gewusst, wo hin die Ausgaben und Fehlermeldungen des Perlprogrammes erfolgen.

Standardmäßig immer nach STDERR. Läuft es als CGI dann in dem Error Log des Webservers.

Bisher war es immer Carp qw(fatalsToBrowser warningsToBrowser); also Fehler und Warnungen auf den Browser abgelenkt.

Dann wird es das auch weiterhin tun.

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hallo nochmal ☺

OK, Ich habe es geschafft, das Hallo Welt-Beispiel (Bei mir heist es "MiniPerlProg.pl") zu starten. Allerdings nur sehr umständlich: ->Gnomeoberfläche/Anwendungen/Zubehör/Terminal. ->Im Terminal cd Desktop (dort liegt das MiniPerlProg.pl) und dann ./MiniPerlProg.pl

Dann erscheint Hallo Welt.

Darüber aber der gesammte Schreibverkehr sichtbar!

Klicke ich auf dem Desktop auf "MiniPerlProg.pl" öffnet sich ein Fenster mit dem Hinweis es sei ein ausführbares Programm und ich kann wählen:

1)Im Terminal ausführen: (ein sehr kurzes aufblizen des Terminalfensters und dann geht es wieder weg. Fertig ☹ 2)Anzeigen: Dort öffnet sich der Texteditor und ich könnte weiter programmieren. 3)Ausführen: Hier passier gar nichts (auf jeden Fall nichts Sichtbares. 4) Abbrechen: Das wollen wir ja nicht!

Erstens: Ich hätte doch ganz gerne ein Fenster das alleine dem Perlprogramm zur Verfügung steht (So wie mein früheres Browserfenster) Das auch nac der Ausgabe "Hallo Welt" lesbar bleibt und sich nicht einfach schließt.

Zweitens: Das ich das Programm "MiniPerlProg.pl" via klick starten kann und nicht jedesmal in die Konsole muss. Ich kann von zukünftigem Personal nicht verlangen, das die immer vom Terminal starten. Die wollen klicken - sind eben alles Windowsdauernutzer *lol*

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Wie wäre es, wenn du dein Programm am Ende auf einen Tastendruck zum Schließen warten lassen würdest. Konsolenanwendungen (in dafür geöffneten Terminals) schließen sich auch automatisch nach Ausführung. Alternative das jeweilige Terminal so einstellen, dass es nach der Ausführung noch nen Tastendruck geöffnet bleibt, das müsstest du allerdings dann für jeden Nutzer/Terminalvariante getrennt machen.

#!/usr/bin/env perl
use strict;
use warnings;
print "Hello World";
<>;

(Jahrhunderte her seitdem ich Perl das letzte mal verwendet habe, ohne Gewähr)

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Was Programmierst du den genau? Du kannst wie Greebo schon sagte noch ein Enter erwarten. Allerdiengs würde das wahrscheinlich jedem Shell benutzer auf den Senkel gehen. Aber ansonsten schreibst du ja das du anscheind Carp (fatalsToBrowser) nutzt, und schreibst auch das du vorher ein Browserfenster hattest. Kurz gesagt handelt es sich hier doch eher um ein CGI Skript, oder?

Warum wird das ganze dann über die Shell gestartet? Wenn dann solltest du entsprechend einen Webserver aufsetzen und dein Skript über den Webbrowser aufrufen.

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hallo Greebo - starkes Foto(süß und witzig) ☺

OK, das wußte ich nicht, das Konsolenfenster sich automatsch schließen - dachte immer die bräuchten noch ein "exit"-Komando...

Wenn du sagst, Konsolenfenster schließen sich automatisch, und das Gnomefenster läßt mir die Wahl zwischen "Ausführen" und "Im Terminal ausführen", dann gehe ich davon aus, daß man es nicht _nur_ im Terminal ausführen kann.

Du verschweigst mir nicht zufällig eine Möglichkeit, wie ich eine Perlprogrammausgabe anderweitig am Bildschirm ausgeben kann?

Da kommt mir eine Idee: Alternativ könnte ich doch die SSI- Zeile in einem extra dafür geschriebenem HTML-Dokument auf ändern und müsste dann lokal das PerlScript anwerfen. Dann könnte ich meine Kenntnisse aus dem Webbereich direkt lokal verwenden! Weil Webseitenlayouts und Schnittstellen sind mir da nicht fremd!

Spricht etwas dagegen ein lokal laufendes Perlscript über einen ebenfalls lokalen Webbrowser laufen zu lassen? Hat sogar den Vorteil, das man das gesamte Konstrukt (Perlprogramm/Datenbank/Browserfrontend) später im Bedarfsfall mit geringem Aufwand ins Internet "mitnehmen" könnte...

Grüße Gary

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hi Sid Burn

Das ist überhaupt die beste Idee!

Werde mir mal die Möglichkeiten eines lokalen Servers ansehen - sper Tipp!

Gruß Gary

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Gary-Technology schrieb:

Hallo Greebo - starkes Foto(süß und witzig) ☺

OK, das wußte ich nicht, das Konsolenfenster sich automatsch schließen - dachte immer die bräuchten noch ein "exit"-Komando...

Das lässt sich bei vielen Terminals einstellen, beim gnome-terminal z.B. über Bearbeiten/Profileinstellungen[Titel und Befehl](Wenn Befehl beendet), das ist aber wie gesagt immer vom jeweiligen Terminalprogramm abhängig, und wenn du sowas an eine Menge an Nutzer verteilen willst sicher nicht praktikabel. Standard bei allem mir bekannten Terminals ist nach Programmende schließen.

Wenn du sagst, Konsolenfenster schließen sich automatisch, und das Gnomefenster läßt mir die Wahl zwischen "Ausführen" und "Im Terminal ausführen", dann gehe ich davon aus, daß man es nicht _nur_ im Terminal ausführen kann.

Ein Terminalprogramm kommuniziert auf Ebene der Standardein- und Ausgabe. Ein Terminal ist ein Programm, dass vereinfacht eine Umgebung anbietet in der die Standardeingabe gelesen und die Standardausgabe geschrieben werden kann. Du kannst ein Programm auch ohne Terminal ausführen, allerdings fehlt dir dann eben die Interaktion, die ein Terminalprogramm üblicherweise ausmacht. Für das System ist es nicht sichtbar, ob ein Programm für einen Terminal oder für eine grafische Umgebung gedacht ist, von daher fragt es nach.

Du verschweigst mir nicht zufällig eine Möglichkeit, wie ich eine Perlprogrammausgabe anderweitig am Bildschirm ausgeben kann?

Du könntest dir einfach eine andere Ausgabestelle für dein Programm suchen. Eine GUI dafür schreiben, oder sofern es wirklich nur um den Ausgabetext geht ein anderes AusgabeGUI hijacken, z.B. mit Zenity

zenity --info --text $(./helloworld.pl)

in ein entsprechendes Shellscript ausgelagert. Das macht die Sache aber wieder Systemabhängig und ist ne schlechte Indirektion. GUI Programmierung hingegen habe ich mit Perl nie gemacht (dazu kann Sid Burn sicher mehr sagen), dürfte aber im Schnitt wohl eher den Rahmen sprengen, insofern schließe ich mich Sid Burn an, wofür soll deine Ausgabe überhaupt dienen.

Da kommt mir eine Idee: Alternativ könnte ich doch die SSI- Zeile in einem extra dafür geschriebenem HTML-Dokument auf ändern und müsste dann lokal das PerlScript anwerfen. Dann könnte ich meine Kenntnisse aus dem Webbereich direkt lokal verwenden! Weil Webseitenlayouts und Schnittstellen sind mir da nicht fremd!

Spricht etwas dagegen ein lokal laufendes Perlscript über einen ebenfalls lokalen Webbrowser laufen zu lassen? Hat sogar den Vorteil, das man das gesamte Konstrukt (Perlprogramm/Datenbank/Browserfrontend) später im Bedarfsfall mit geringem Aufwand ins Internet "mitnehmen" könnte...

Grüße Gary

Nö denke nicht, finde Sids Vorschlag eigentlich auch sehr okey ☺. Obiges war nur der Vollständigkeit halber 😉

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hallo again!

Nur zur info: Das soll eine Datenbank werden, mit Kundendaten und jeweils mehreren Verträgen. Recht komplexe Geschichte. Und um vor "race-conditions" sicher zu sein, will ich unbedingt DBD::CSV nutzen. Vor allem um spätere Abfragen der Datensätze, Anzeigemodi und natürlich auch das Editieren von bestehenden Daten möglichst einfach zu halten. Wobei ich mir aber auch überlegt habe, da ja immer nr eine Person die DB nutzen soll, auf die Schnittstelle zu verzichten und alles manuel "zu Fuß" mittels open und close Routinen zu realisieren. Bevor ich aber auch nur eine Zeile programmiere, muss erst einmal ds Gesamtkonstrukt zumindest geistig stehen. Welche Variablen, Arrays... Welche funktionen werden gebraucht, welche wären schön zu haben und was wäre luxus... solche Dinge eben.

Ich danke euch beiden für eure Hilfe. Sind wieder einige neue Ideen dabei herausgekommen... 😉

Werde mich eventuell mit dem apachen beschäftigen.

Grüße Gary

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Gary-Technology schrieb:

Nur zur info: Das soll eine Datenbank werden, mit Kundendaten und jeweils mehreren Verträgen. Recht komplexe Geschichte. Und um vor "race-conditions" sicher zu sein, will ich unbedingt DBD::CSV nutzen.

Inwiefern sollte DBD::CSV dich den vor Race Conditions schützen? Und welche erwartest du?

Vor allem um spätere Abfragen der Datensätze, Anzeigemodi und natürlich auch das Editieren von bestehenden Daten möglichst einfach zu halten. Wobei ich mir aber auch überlegt habe, da ja immer nr eine Person die DB nutzen soll, auf die Schnittstelle zu verzichten und alles manuel "zu Fuß" mittels open und close Routinen zu realisieren.

Also einfach finde ich es ganz und gar nicht alles manuell mit "open", "close" zu machen. Manuell mit den Dateien umzugehen halte ich für schwieriger als einfach eine Datenbank zu nutzen. Und damit zu rechnen das nur einer die Datenbank nutzt würde ich auch nicht. Was ist wenn doch mal zwei zugreifen sollen? Schreibst dann alles neu?

Bevor ich aber auch nur eine Zeile programmiere, muss erst einmal ds Gesamtkonstrukt zumindest geistig stehen. Welche Variablen, Arrays... Welche funktionen werden gebraucht, welche wären schön zu haben und was wäre luxus... solche Dinge eben.

Also ich würde lieber SQLite nutzen für deine Speicherung. Naja und Catalyst als Webframework. Und ich würde eher in Klassen denken. Welche Klassen benötigst du und dazu ein Interface schreiben. Eventuell auch DBIx::Class als ORM und/oder Moose für die OOP.

Aber auch wenn Catalyst, DBIx::Class und Moose für dich zu neu oder schwierig sein sollte. SQLite also DBD::SQLite würde ich defenitiv gegenüber DBD::CSV bevorzugen und ich würde es auch nicht versuchen manuell nachzuprogrammieren.

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hi nochmal

Ich habe versucht aus den Paketquellen apache2 zu installieren und bekam folgende Mitteilung:

W: http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2-utils_2.2.11-2ubuntu2.5_amd64.deb konnte nicht heruntergeladen werden 404 Not Found [IP: 91.189.88.37 80]

W: http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2.2-common_2.2.11-2ubuntu2.5_amd64.deb konnte nicht heruntergeladen werden 404 Not Found [IP: 91.189.88.37 80]

W: http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2-mpm-worker_2.2.11-2ubuntu2.5_amd64.deb konnte nicht heruntergeladen werden 404 Not Found [IP: 91.189.88.37 80]

W: http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2_2.2.11-2ubuntu2.5_all.deb konnte nicht heruntergeladen werden 404 Not Found [IP: 91.189.88.37 80]

Funktioniert jetzt trozdem alles oder muss ich mir Sorgen machen. Scheint mein Rechner mit dem "Phenon X3 64 AMD Chip" ist entweder zu neu oder zu selten? Wäre auch zufrieden wenn der apache nur im 32Bit-Modus läuft. Was mache ich jetzt am schlausten?

Gruß Gary

Gary-Technology

(Themenstarter)

Anmeldungsdatum:
9. Oktober 2009

Beiträge: 105

Hi

Habe unter wikiubuntuusers.de einen direkt-Downloadlink gefunden und benutzt. Danke

Gruß Gary

Antworten |