Thread Prüfen ob ein Package definiert ist?
(6 answers)
Opened by Linuxer at 2019-11-20 19:31
Hi,
ich kann ja mehrere packages innerhalb eines Skriptes definieren und später benutzen. Nun stellt sich mir gerade die Frage, ob ich im main prüfen kann, welche packages definiert worden sind, bzw. ob ein bestimmtes package definiert ist? Hier ein Beispiel-Code, der mit Workaround auf Linux funktioniert: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #! /usr/bin/perl use strict; use warnings; use 5.020; package foo; sub foo { } sub dummy { } package bar; sub bar { } sub dummy { } package main; use File::Basename; # Das Original Skript heisst meinetwegen skript.pl # soll aber unter diversen Namen mit verschiedenen Funktionen aufgerufen werden # z.B. via SymLinks oder Hardlinks # ln skript.pl foo # hard linked # ln -s skript.pl bar # symlinked # ln -s skript.pl not_defined # # Die verschiedenen Funktionen sollen oben in den packages definiert werden # # Zum Start sollte aber geprüft werden, ob das "aufgerufene" Package überhaupt definiert worden ist. # ermittle gewünschtes Package my $called_as = File::Basename::basename($0); # Als Workaround könnte ich in jedem Package eine Dummy Funktion definieren und prüfen, # ob die vorhanden ist; wenn ja, gilt die Annahme, dass das Package korrekt definiert ist # (ist oben bereits so gemacht). if ( ! $called_as->can("dummy") ) { die "(E) Aufruf als '$called_as' zur Zeit noch nicht unterstützt.\n"; } # Das hat halt den Nachteil, dass ich diese dummy Funktion eben in jedem Package definiert haben muss. # Es ist noch nicht abzusehen, ob ich eine "sinnvolle" Funktion in allen Packages haben werde, die # überall den gleichen Namen haben wird. #### Schöner fände ich einen direkten Check, ob das package definiert ist; etwas dieser Art #if ( ! package_exists($called_as) ) { # die "(E) Aufruf als '$called_as' zur Zeit noch nicht unterstützt.\n"; #} ### Hier geht's dann weiter mit der gewünschten Ausführung... say "Yes! We can run as $called_as."; # ... __END__ Ausgeführt: Code: (dl
)
1 ll -lisa Momentan bräuchte ich es als packages in einer Datei. Ich weiß, ich könnte zu jedem Package eine eigene Datei erstellen und diese dann versuchen zu laden und dieses auf Erfolg prüfen. Aber derzeit interessiert mich eben die Frage, ob ich prüfen kann, dass ein bestimmter Namensraum per package definiert wurde oder nicht. Hoffe, ich konnte mein Anliegen ausreichend erklären. Ideen? Hinweise? Übersehe ich etwas? edit: more-Tags eingebaut; Tippfehler verjagt Last edited: 2019-11-21 00:01:47 +0100 (CET) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |