Schrift
[thread]6249[/thread]

Variablen übergeben (Seite 3)



<< |< 1 2 3 >| >> 29 Einträge, 3 Seiten
lichtkind
 2004-05-13 20:11
#82265 #82265
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
genau,
diese sollten auch mit

use lib .....;

angemeldet werden
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Gast Gast
 2004-05-13 20:11
#82266 #82266
Schon klar ...
@INC beinhaltet auch den Pfad zum Arbeitsverzeichnis des Hauptprograms (dafür habe ich gesorgt) - deshalb wird ja im Hauptprogramm
use Modul::Foo;
einwandfrei ausgeführt (wobei 'Modul' ein Unterverzeichnis des Hauptprogramms ist).

Innerhalb der Datei 'Foo.pm' passiert es dann:
use Bar;
funktioniert nicht (obwohl ich mich im Verzeichnis 'Modul' befinde)
und
use Modul::Bar;
funktioniert auch nicht.

irgendwie bin ich jetzt ratlos ...\n\n

<!--EDIT|Dieter|1084466434-->
renee
 2004-05-13 20:41
#82267 #82267
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn in der ersten Zeile des Bar.pm ein
Quote
package Modul::Bar;
steht, dann mach mal in Foo.pm ein
Code: (dl )
1
2
3
use FindBin ();
use lib $FindBin::Bin.'/../';
use Modul::Bar;
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/
ptk
 2004-05-13 20:44
#82268 #82268
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Anscheinend doch nicht klar... ein in Modul/Foo.pm aufgerufenes "use Bar" kann nur dann Modul/Bar.pm laden, wenn explizit der Pfad des Verzeichnisses von Modul/Bar.pm in @INC angegeben ist. Dass sich beide Module im gleichen Verzeichnis befinden, ist irrelevant.

"use Modul::Bar" sollte allerdings funktionieren, wenn bereits "use Modul::Foo" funktioniert hat. Was heisst "nicht funktionieren"? Vielleicht ist $INC{"Modul/Bar.pm"} auf andere Weise definiert worden?
ptk
 2004-05-13 20:49
#82269 #82269
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,13.May.2004, 18:41]wenn in der ersten Zeile des Bar.pm ein
Quote
package Modul::Bar;
steht, dann mach mal in Foo.pm ein
Code: (dl )
1
2
3
use FindBin ();
use lib $FindBin::Bin.'/../';
use Modul::Bar;
[/quote]
"use FindBin" bezieht sich immer auf das aufrufende Skript, nicht auf das derzeitige Modul. Wenn man relativ zu einem Modul ein Verzeichnis waehlen will, muss man folgendes machen:
Code: (dl )
1
2
3
4
5
6
7
use File::Basename;
BEGIN {
my $mod =;
$mod =~ s{::}{/}g;
$mod .= ".pm";
push @INC, dirname $INC{$mod}; # oder unshift, ggfs. mit Test, ob das Verzeichnis bereits in @INC existiert
}
Gast Gast
 2004-05-13 20:50
#82270 #82270
Das ist ja was mich so irritiert ...
im Hauptprogramm funktioniert
use Modul::Foo;

im Package 'Foo' funktioniert
weder
use Bar;
noch
use Modul::Bar;
ptk
 2004-05-13 21:03
#82271 #82271
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Debugging? Was sagt
Code: (dl )
1
2
3
BEGIN {
require Data::Dumper; print STDERR Data::Dumper->new([\@INC,\%INC],[])->Indent(1)->Useqq(1)->Dump;
}
?
ronald
 2004-05-14 11:17
#82272 #82272
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
Poste uns doch mal deine Quellen.
Dann sieht man auch, was das heisst, dass etwas nicht funktioniert.
Gast Gast
 2004-05-14 15:50
#82273 #82273
Hat sich erledigt - der Debugger in Kommodo hatte mich (mal wieder) auf die Rolle geschoben.

Herzlichen Dank für Eure Kommentare :)
<< |< 1 2 3 >| >> 29 Einträge, 3 Seiten



View all threads created 2004-05-11 20:27.