Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8215[/thread]

dynamische module: dynamische einbindung



<< >> 10 Einträge, 1 Seite
dani
 2006-08-03 11:52
#68528 #68528
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen...

Gibt es eine Möglichkeit, Module dynamisch einzubinden?

Dies geht nicht:
Code: (dl )
1
2
3
my $modname = "mod_1";  # dies wird übergeben
use lib "modules"; # folder der Module
use $modname;


- das use $modname funktioniert nicht mit einer Variabel zur Modulangabe

Gib es auch eine Möglichkeit bei use lib die Pfadangabe mittels Variabeln zu lösen?

Danke im voraus für die Hilfe...
renee
 2006-08-03 12:03
#68529 #68529
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst require benutzen:
Code: (dl )
1
2
3
4
my $module_dir = 'modules';
my $module_name = 'mod_1';

require $module_dir.'/'.$module_name;


use wird zur Compilezeit ausgeführt - und da ist Dein Variablenname noch nicht bekannt. require wird zur Laufzeit ausgeführt.
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/
dani
 2006-08-03 12:14
#68530 #68530
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Dann habe ich aber das Problem, dass ich nicht auf die Variabeln zugreifen kann.

mail.pl:
Code: (dl )
1
2
3
4
5
6
my %divs;
my $content;
my $mod = "modules";
push(@INC,$mod);
require "$mod_1.pm";
&$mod_1();


start.pm:
Code: (dl )
1
2
3
4
5
sub start() {
  $content = "test";
  $divs{'test'} = "test";
}
1;


Oder wie kann ich die Variabel und den Hash übergeben?

*edit: + .pm added\n\n

<!--EDIT|dani|1154593017-->
esskar
 2006-08-03 12:34
#68531 #68531
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
stichwort: referenzen

Code: (dl )
1
2
3
4
5
6
7
8
package Module;

sub start() {
my ($content, $divs) = @_;
$$content = "test";
$divs->{'test'} = "test";
}
1;


und dann der aufruf

Code: (dl )
Module::start(\$content, \%divs);
dani
 2006-08-03 12:41
#68532 #68532
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Das löst aber das Problem nicht, da ich dazu den Namen des Moduls und der Funktion wissen müsste.

Und mit require ist dies nicht nötig.

Die globalen Variabeln sind im main script,
und das eingebundene Script (muss nicht zwingend eine sub Routine beinhalten), soll den Wert nun verändern können.
esskar
 2006-08-03 13:01
#68533 #68533
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
lern dann bitte erstmal richtig und strukturiert zu programmieren.
renee
 2006-08-03 13:12
#68534 #68534
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und bitte verwende mal Wiki:[tt]use strict[/tt]!
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/
dani
 2006-08-03 13:16
#68535 #68535
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Ich verstehe nicht wie du den Modul & Funktionsaufruf da machen willst, ohne den effektiven Namen der Files & Funktionen zu kennen. Und zusätlich die Möglichkeit hast, die Variabeln oder Hashes aus dem Hauptscript zu ändern.

* edit: diese antwort betrifft esskar\n\n

<!--EDIT|dani|1154596839-->
pq
 2006-08-03 14:18
#68536 #68536
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
antwort auf die ursprünglichen fragen:
Code: (dl )
1
2
my $mod = "blabla";
eval "use $mod";

Code: (dl )
1
2
3
4
5
my $lib;
BEGIN {
 $lib = "foo/bar";
}
use lib $lib;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
dani
 2006-08-03 15:10
#68537 #68537
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Vielen Dank, das habe ich gesucht.
<< >> 10 Einträge, 1 Seite



View all threads created 2006-08-03 11:52.