Schrift
[thread]873[/thread]

Perl-Modul nur einbinden, wenn auch installiert? (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
PerlProfi
 2007-01-05 15:11
#9464 #9464
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Dein Beispiel habe ich weiter oben auch nochmal umgeschrieben.
renee
 2007-01-05 15:19
#9465 #9465
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Auch die Fehler vom String-eval landen in $@:
Code: (dl )
1
2
3
4
5
6
7
8
9
C:\>perl -e "eval qq~use Scheffe~"

C:\>perl -e "eval qq~use Scheffe~; print $@ if
$@"
Can't locate Scheffe.pm in @INC (@INC contains: C:/usr/lib C:/usr/site/lib .) at
(eval 1) line 2.
BEGIN failed--compilation aborted at (eval 1) line 2.

C:\>


Wenn die Fehlermeldung trotzdem kommt, steht im Code vermutlich noch ein use Modul (ohne eval).

Ein eval "use Modul"; bietet sich an, um nicht eval "require Modul; import Modul" machen zu müssen...
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/
PerlProfi
 2007-01-05 15:36
#9466 #9466
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Stimmt, ich hatte mich vertan, das Programm bricht nicht bei einem string eval(), sondern bei einem block eval{} ab, falls Fehler auftreten.

edit:
Ich finde die require() import() Methode aber überhaupt nicht schlecht, denn sie macht ja auch genau das, was x-man möchte.
Nachschauen ob das Modul installiert ist, und wenn ja, dann importieren, ansonsten Ein anderes ähnliches Modul benutzen, oder eine Fehlermeldung ausgeben(dafür braucht man das ja dann eher nicht), oder eine eigene Bibliotek verwenden.
Eben dass, was topeq schon geschreiben hat.\n\n

<!--EDIT|PerlProfi|1168004515-->
x-man
 2007-01-05 15:42
#9467 #9467
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Danke, ich werde es mal gründlich testen.\n\n

<!--EDIT|x-man|1168004776-->
PerlProfi
 2007-01-05 15:46
#9468 #9468
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Also ich hatte das bei mir getestet, da hat es funktioniert.
Hast du es denn auch mit require() und import() versucht?

MfG PerlProfi
x-man
 2007-01-05 16:00
#9469 #9469
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
@ PerlProfi: Vielen Dank! Es hat prima funktioniert!
@ Euch allen: schönes Wochenende!
renee
 2007-01-05 16:18
#9470 #9470
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@PerlProfi: ein use ist nichts anderes wie ein require - import (siehe perldoc -f use)...
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/
sid burn
 2007-01-05 17:59
#9471 #9471
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
Ich finde die require() import() Methode aber überhaupt nicht schlecht, denn sie macht ja auch genau das, was x-man möchte.
Nachschauen ob das Modul installiert ist, und wenn ja, dann importieren, ansonsten Ein anderes ähnliches Modul benutzen, oder eine Fehlermeldung ausgeben(dafür braucht man das ja dann eher nicht),

Ein require bindet das Modul bereits ein und nicht die import Methode. Die "import" Methode importiert Funktionen in deinen Namenspace.

Bei reinen OOP Modulen musst du import nicht aufrufen da sie ohnehin nichts in deinem Namenspace importieren würden.

Das mit require überprüft wird ob das Modul da ist, und das es letztendlich mit import() eingebunden wird, ist also falsch.

Wenn du die andere Schreibweise benutzt fällt der Fehler eher auf:

Code: (dl )
GD->import()


Wie soll eine import Methode von GD ausgeführt werden, wenn das Modul vorher noch gar nicht geladen wurde? Eine "import" Funktion so gibt es in Perl nicht direkt.\n\n

<!--EDIT|sid burn|1168012811-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
PerlProfi
 2007-01-05 18:52
#9472 #9472
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
@renee, wieso soll denn versucht werden import() aufzurufen, wenn das Modul gar nicht installiert ist?
Da kann man schon erstmal mit require() den code aus dem Modul ausführen, und erst wenn das gut ging die Funktionen import()iren.

@sid burn, require() macht sogar noch mehr. Es führt den code aus, der in dem angegebenen Modul(oder auch Datei) steht. Bei Modulen muss allerdings meistens nur package() ausgeführt werden, und die Subroutinen werden "geladen".
Und die import() Methode sollte alles nötige importieren, ist aber nichts anderes, als eine Subroutine aus dem jeweiligen package, die ausgeführt wird.
Ich habe nie gesagt, dass ein Modul mit import() eingebunden wird, oder doch? Gut, ich hab gesagt, dass man mit require nachschauen kann, ob ein Modul installiert ist, stimmt das etwa nicht?
require() überprüft doch auch, ob das Modul(oder die Datei) vorhanden ist, und wenn nicht, wird eine Fehlermeldung produziert.
Ich habe übrigens auch nicht gesagt, dass import() eine core Funktion ist.

MfG PerlProfi
bloonix
 2007-01-05 20:46
#9473 #9473
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=x-man,05.01.2007, 14:07][quote=opi,05.01.2007, 04:11]welchen Sinn soll die Prüfung haben?[/quote]
Der Sinn der Prüfung ist die Fehlermeldung zu unterdrücken und ggf. ein anderes Modul zu verwenden. Wenn GD nicht installiert ist und ich[/quote]
Das Skript wird doch vom Webserver aufgerufen und da finde ich ein eval()
bei jedem Aufruf unsinnig! Die bessere Möglichkeit wäre festzustellen,
welches Modul der Benutzer lieber mag und dann die Einbindung fest
vorzunehmen.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2007-01-05 01:16.