Schrift
[thread]9993[/thread]

use bei nicht-vorhandenen Pakten



<< >> 4 Einträge, 1 Seite
Gast Gast
 2007-08-07 16:35
#97713 #97713
Ich möchte überprüfen, ob ein bestimmtes Paket per use linkbar ist. Sofern das möglich ist, soll mein Skript bestimmte Funktionen diesen Paktes nutzen. Ansonsten soll es bitte darauf verzichten und einen anderen Ablauf vornehmen.
Typischerweise bricht mein Skript ab, sofern ein Paket, welches ich mit use linke, nicht existiert.

Meine Frage ist nun, wie kann ich innerhalb des Perl-Skripts feststellen, ob ein Paket verfügbar ist und für den Fall das es nicht verfügbar ist, einfach einen anderen Programmablauf forcieren, ohne dass mein Skript abbricht.

In C++ würde ich so etwas über Makros machen.
renee
 2007-08-07 16:57
#97715 #97715
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
eval "use Modulname";
if( $@ ){
    print "Konnte Modul nicht laden";
}
else{
    print "alles ok!";
}
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/
Gast Gast
 2007-08-08 12:43
#97765 #97765
thnx, funzt perfekt
murphy
 2007-08-08 16:40
#97781 #97781
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich finde, dass hier eigentlich nichts dafür spricht, eine Stringauswertung zu verwenden. Viel sauberer wäre
Code (perl): (dl )
1
2
3
4
5
6
7
eval { require Some::Module; };
unless ($@) {
  import Some::Module;
}
else {
  warn "Couldn't load Some::Module: $@";
}


edit: Wenn man das ganze mehrfach benötigt, könnte man sich auch eine Subroutine dafür schreiben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
sub try2use(*@) {
  my $m = shift;

  local $_ = $m; s|::|/|g; $_ .= ".pm";
  my $r = eval { require };

  $m->import(@_) if ($r && !$@);

  $r;
}


Dann reduziert sich das optionale Einbinden des Moduls auf das meiner Meinung nach gut verständliche Konstrukt
Code (perl): (dl )
1
2
3
if (try2use My::Module) {
  # do something
}
When C++ is your hammer, every problem looks like your thumb.
<< >> 4 Einträge, 1 Seite



View all threads created 2007-08-07 16:35.