Schrift
[thread]11989[/thread]

Perl-Modul verwenden

Leser: 1


<< >> 10 Einträge, 1 Seite
Rex
 2008-06-07 13:07
#110843 #110843
User since
2006-11-05
2 Artikel
BenutzerIn
[default_avatar]
Ich möchte nun zum ersten mal ein Perl Modul verwenden.
Dabei handelt es sich um das Modul Archive-TarGzip (http://search.cpan.org/~softdia/Archive-TarGzip-0....).

Beim Provider gibt es das cgi-bin Ordnerverzeichnis.
Was muss ich nun mit dem Modul machen? - Muss ich es vorher irgendwie kompilieren? Und wie kann ich dann einfach eine solche tar entpacken lassen, die im Hauptordner (html) des Servers liegt? -

Ich danke euch für eure freundliche Hilfe und Unterstützung!
Mit freundlichen Grüßen
Rex
Taulmarill
 2008-06-07 13:17
#110846 #110846
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Schaue dir am besten erst mal die entsprechende FAQ im Wiki an: Wiki:ModuleWieInstalliereIchEinModul
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
mife
 2008-08-10 14:02
#113285 #113285
User since
2008-08-10
3 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

als PHP-Programmierer hab ich zum ersten Mal mit Perl zu tun und versuche "Algorithm-Diff-1.1902" zum Laufen zu bringen.

Hab laut Anweisung der Wissensbasis zur manuellen Installation ein Skript zusammenkopiert:


#!/usr/bin/perl

use lib qw(/www/htdocs/w00a0365/cgi-bin/diff_perl/lib/Algorithm);

perl Makefile.PL PREFIX=/www/htdocs/*****/cgi-bin/diff_perl/lib LIB=/www/htdocs/*****/cgi-bin/diff_perl/lib
make
make test
make install


Wie der launige Hinweis "...und ein paar system()-Befehle" umzusetzen ist, weiß ich nicht.

Ergebnis des Skripts: Fehler 500


Vorher hatte ich versucht das Perl-Skript zum Textvergleich direkt anzuwerfen.
Damit die Lib gefunden wird hatte ich den Suchpfad ergänzt.

#!/usr/bin/perl -w
use strict;
use File::Find;
use CGI::Carp qw(fatalsToBrowser);

BEGIN {
push(@INC, '/www/htdocs/*****/cgi-bin/diff_perl/lib/');
};
use Algorithm::Diff qw(diff);
...

Zum Debuggen funktioniert die, jedoch nicht warn.


Freue mich über jede Hilfe, um das Diff-Skript verwenden zu können.
GwenDragon
 2008-08-11 11:34
#113317 #113317
User since
2005-01-17
14774 Artikel
Admin1
[Homepage]
user image
@mife
Hat das installieren des Moduls geklappt?
Wenn nein, welche Fehlermeldungen kamen (bitte hier posten; CODE-Tags ?verwenden).

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use lib qw(/www/htdocs/w00a0365/cgi-bin/diff_perl/lib/Algorithm);

perl Makefile.PL PREFIX=/www/htdocs/*****/cgi-bin/diff_perl/lib LIB=/www/htdocs/*****/cgi-bin/diff_perl/lib
make
make test
make install

Hast du das als Skript geschrieben?

Quote
Vorher hatte ich versucht das Perl-Skript zum Textvergleich direkt anzuwerfen.

Und wie?

Quote
Wie der launige Hinweis "...und ein paar system()-Befehle" umzusetzen ist, weiß ich nicht.

Wo ist der Hinweis, im Wiki hier?

Quote
Damit die Lib gefunden wird hatte ich den Suchpfad ergänzt.

mit push(@INC ... ?

Quote
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w
use strict;
use File::Find;
use CGI::Carp qw(fatalsToBrowser);

BEGIN {
push(@INC, '/www/htdocs/*****/cgi-bin/diff_perl/lib/');
};
use Algorithm::Diff qw(diff);

Code: (dl )
1
2
3
BEGIN {
unshift(@INC, '/www/htdocs/*****/cgi-bin/diff_perl/lib/');
};
wäre sinnvoller, da haben die Module im inkludierten Pfad vorrang.

Quote
Zum Debuggen funktioniert die, jedoch nicht warn.

Wie geschieht dein Debugging? Mit Ausgaben auf STDOUT oder STDERR?
bei warn und die landen die Ausgaben im Serverlog.
renee
 2008-08-11 11:55
#113318 #113318
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mife+2008-08-10 12:02:39--
#!/usr/bin/perl

use lib qw(/www/htdocs/w00a0365/cgi-bin/diff_perl/lib/Algorithm);

perl Makefile.PL PREFIX=/www/htdocs/*****/cgi-bin/diff_perl/lib LIB=/www/htdocs/*****/cgi-bin/diff_perl/lib
make
make test
make install


Du vermischst da einiges.

Die use lib-Anweisung fügt etwas dem Array @INC hinzu. Damit erweiterst Du also "nur" den Suchpfad für Module. Wenn Du in ein Verzeichnis wechsel willst, dann musst Du chdir nehmen.

Die 4 anderen Zeilen sind Kommandozeilenbefehle und *kein* Perl-Befehle.

Quote
Wie der launige Hinweis "...und ein paar system()-Befehle" umzusetzen ist, weiß ich nicht.


Hast Du Dir die Hilfe zu system mal durchgelesen? (perldoc -f system).

Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

chdir "/www/htdocs/w00a0365/cgi-bin/diff_perl/lib/Algorithm";

system( "perl Makefile.PL PREFIX=/www/htdocs/*****/cgi-bin/diff_perl/lib LIB=/www/htdocs/*****/cgi-bin/diff_perl/lib" );
system( "make" );
system( "make test" );
system( "make install" );


Hier fehlt jedoch noch die Fehlerbehandlung...

Im weiteren Verlauf des Postings klingt es so, als ob das Modul schon installiert wäre. Was sagt denn das Skript
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use strict;
use warnings;

print "Content-Type: text/plain\n\n";

eval{
  require Algorithm::Diff;
  print $INC{'Algorithm/Diff.pm'};
  1;
} or print $@;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2008-08-11 11:57
#113319 #113319
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
GwenDragon+2008-08-11 09:34:00--
Quote
Damit die Lib gefunden wird hatte ich den Suchpfad ergänzt.

mit push(@INC ... ?

Quote
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w
use strict;
use File::Find;
use CGI::Carp qw(fatalsToBrowser);

BEGIN {
push(@INC, '/www/htdocs/*****/cgi-bin/diff_perl/lib/');
};
use Algorithm::Diff qw(diff);

Code: (dl )
1
2
3
BEGIN {
unshift(@INC, '/www/htdocs/*****/cgi-bin/diff_perl/lib/');
};
wäre sinnvoller, da haben die Module im inkludierten Pfad vorrang.


use lib ist noch sinnvoller, weil dann noch die anderen Pfade wie "auto" oder mit der Version (z.B. "5.8.8") mit in den Suchpfad aufgenommen werden.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mife
 2008-08-11 12:54
#113322 #113322
User since
2008-08-10
3 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für die Antworten :))

@GwenDragon

Ergebnis des Skripts: Fehler 500 - (Internal Server Error)
Daher gehe ich davon aus, daß die Installation fehl schlug.

Hier noch mal der Source-Code von http:///<domain>/cgi-bin/cgipan.cgi

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use lib qw(/www/htdocs/w00a0365/cgi-bin/diff_perl/lib/Algorithm);

perl Makefile.PL PREFIX=/www/htdocs/*****/cgi-bin/diff_perl/lib LIB=/www/htdocs/*****/cgi-bin/diff_perl/lib
make
make test
make install


Direkter Aufruf: <domain>/cgi-bin/diff_perl/diff.pl a.txt b.txt
wobei a.txt und b.txt im selben Verzeichnis liegende Textdateien sind.

Wie ich ausgebe STDOUT oder STDERR oder Serverlog weiß ich leider nicht.

Link in der Wiki (von Taulmarill gepostet) http://faq.perl-community.de/bin/view/Wissensbasis...

Einsatz on "unshift" statt "push" ergibt keine Änderung.

die() erzeugt bei mir eine Ausgabe, warn() nicht.



Ergebnis des Skripts: Fehler 500 - (Internal Server Error)

renee
 2008-08-11 13:00
#113323 #113323
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hast Du meine Antwort gelesen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mife
 2008-08-11 13:06
#113324 #113324
User since
2008-08-10
3 Artikel
BenutzerIn
[default_avatar]
Hallo renee,

(selbstverständlich habe ich Deine Antwort gelesen - vielen Dank auch)

perldoc -f system
Damit hatte ich unter xampp auf winxp keinen Erfolg.

Hab das Skript entsprechend Deinem Vorschlag geändert, allerdings kommt immernoch Fehler 500.

Genauso Dein Skript, um die Erreichbarkeit von Algorithmus zu testen.
renee
 2008-08-11 13:36
#113326 #113326
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wird kein Header ausgegeben. Mach mal noch ein print "Content-type: text/plain\n\n" am Anfang des Skripts.

Übrigens ist dieser Wiki:Artikel ganz interessant zum Thema "500er".
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 10 Einträge, 1 Seite



View all threads created 2008-06-07 13:07.