Schrift
[thread]907[/thread]

(xampp) Probleme mit do use require

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2007-03-23 22:01
#9832 #9832
Hallo zusammen,

ich habe mir heute Xampp mit ModPerl installiert. Soweit läuft alles auch Fehlerfrei.

Mein Problem ist folgendes.

Ich möchte Funktionen, wegen der Übersichtlichkeit auslagern.
Binde ich jetzt die Datei func.pm mit use oder require eine bekomme ich immer die Meldung, dass ich eine undefinierte subroutine aufrufen würde.
Binde ich die Datei hingegen mit do ein, funktioniert alle fehlerfrei.

Die Datei Func.pm sieht in etwa so aus, einfach nur zum testen erstellt.

----
use strict;

sub rechnen {
my $a = 4;
my $b = 5;

my $c = $a+$b;

return ($c);
}
----

Normal müsste das doch auch mit use oder require funktionieren, oder irre ich mich?

Kann mir vielleicht jemand helfen?
Im vorraus besten Dank,
Grüße Michaela
renee
 2007-03-24 13:00
#9833 #9833
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und wie hast Du das in dem Skript mit require bzw. use gemacht? Da dürfte wohl der Fehler liegen.
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/
MisterL
 2007-03-24 14:47
#9834 #9834
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Hallo.

Und wo wurde die Datei untergebracht ? Direkt in /xampp/cgi-bin ?
Bei einem meiner Programmierkunststücke mit XAMPP und CGI hat der Befehl
Code: (dl )
1
2
3
4
5
 BEGIN {
unshift( @INC, "<hier steht der volle Pfad zur .pm Datei>" );
}

use <Dateiname>.pm;

jedenfalls geholfen ;-)
Auch auf die Gefahr einer besseren Lösung hin....

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
nepos
 2007-03-24 15:04
#9835 #9835
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sauberer wäre doch die Variante mit use lib "/pfad/zum/modul";.
MisterL
 2007-03-24 15:23
#9836 #9836
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Stimmt.
Wusste ich doch das da noch was war... ;-)
“Perl is the only language that looks the same before and after RSA encryption.”
Gast Gast
 2007-03-24 16:01
#9837 #9837
Hallo,
ich muss leider einen neuen Thread eröffnen, irgendwie klappt das mit der Registrierung nicht.

Ich dank alle für die Antowrten.

Ich bin die die scripte  use lib "/pfad/zum/modul";. ein.

Ich binde die Funktionen in zwei Scripte ein. Das kurriose dabei ist, das, wenn ich script A aufrufe, alles funktioniert. Rufe ich Script B auf bekomme ich die Fehlermeldung. Starte ich danach den Webserver neu und rufe wieder Script B auf, ist wieder alles in Ordnung. Script A liefert dann wieder die Meldung.

Im xampp Forum bin ich auf folgenden Beitrag gestoßen:

Quote
poerk hat Folgendes geschrieben:
Hi Leute,

hab folgendes Problem...
Ein Gästebuch-script, das vorher woanders fehlerfrei gelaufen hat, funktioniert unter Xampp+Addon nicht mehr richtig bzw. irgendwas bei Xampp ist nicht richtig eingestellt, denn meine Ausgabe 'addiert' sich bei jedem Aufruf auf. Ich bekomme also beim Aufruf, die Ausgabe, die ich haben will, plus alle Ausgaben zuvor...
Weiß jemand von euch woran das liegt?!

Gruß,
Pörk


Ging mir - bis vor 60 Minuten - genauso (seltsamerweise auch bei einem Guestbook Wink)
Ca. zwei Tage habe ich mich verzweifelt durchs Netz gegooglet auf der Suche nach brauchbaren Infos bzw. Lösungen, bis ich auf einen ersten Hinweis gestossen bin: komisches cache verhalten.
Aha; es liegt also an mod_perl - erstes Erfolgserlebnis ...
Nächster Schritt: wie konfiguriere ich den Apachen bzw. Perl bzw. mod_perl so, daß der Aufruf eines Perl-Scripts sich wie gewohnt verhält ??? Nochmal endloses Suchen - ohne brauchbares Ergebnis.
Letzte Möglichkeit: mod_perl deaktivieren - doch wie? Rolling Eyes
Also erneut das www durchforstet, bis ich mehr oder weniger durch Zufall - auf dem eigenen Rechner - auf readme-addon-perl.txt gestossen bin, wo steht:
Zitat:
... "setup_xampp.bat" kann das Modul
mod_perl aktiviert oder deaktiviert werden.

Na endlich!
Ach ja - ein weitaus größeres Problem war das Verhalten von mod_perl im Zusammenhang mit dem Einbinden von selbstgestrickten Moduln mittels use bzw. require:
Modul X wird korrekt in Script A und B eingebunden.
Aufruf von Script A - einwandfrei.
Aufruf von Script B - ERROR!!!
Nach dem Neustart des Apachen:
Aufruf von Script B - einwandfrei.
Aufruf von Script A - ERROR!!!
Nach Deaktivierung von mod_perl:
Aufruf von Script A - einwandfrei.
Aufruf von Script B - einwandfrei. [/quote]

Das beschreibt mein Problem schon treffend. Leider war kein wirklicher Lösungsansatz zu erkennen.

Grüße Michaela

Edit betterworld: Zitat-Tags wieder geschlossen.\n\n

<!--EDIT|betterworld|1174749469-->
betterworld
 2007-03-24 17:29
#9838 #9838
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich habe die Threads verschmolzen.
MisterL
 2007-03-24 19:30
#9839 #9839
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Also so ein bisschen Code könnte nicht schaden ;-)
Falls es mit der Registrierung immer noch nicht hinhaut, kann man ihn hierher senden:
Code: (dl )
 MisterL_Coder   ät         arcor  .  de 


---
Modedit Gwendragon: E-Mail etwas mehr verschleiert
---\n\n

<!--EDIT|GwenDragon|1174758101-->
“Perl is the only language that looks the same before and after RSA encryption.”
Michaela
 2007-03-25 14:17
#9840 #9840
User since
2007-03-25
3 Artikel
BenutzerIn
[default_avatar]
Hallo und guten Morgen,
ich danke euch für eure tatkräftige Hilfe. Die Registrierung hat jetzt geklappt.

Hier mal meine 3 Scripte. Ein Testscript. Es wird eine Blätterfunktion per use do oder require eingebuden.

dateiA:
Code: (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
#!/usr/local/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";

#Includes
use lib ('C:/Programme/xampp/htdocs/ptest');
use func;

#GET HOLEN
#Die Seitenzahl wird übergeben
#Wenn vorhanden $seite=übergabe
#Sonst $seite = die übergebene Seitenzahl
my $daten = $ENV{'QUERY_STRING'};;
my @formulardaten = split(/=/, $daten);
my $seite ="";
if($formulardaten[0] eq "") {
my $seite=1;
}
else {
$seite = $formulardaten[1];
}


#Werte für Blätterfunktion ermitteln
#Start und Eintraege_pro_seite wird für das Limit bei der Sql abfrage benötigt
my $eintraege_pro_seite = 8;
my $start=$seite * $eintraege_pro_seite - $eintraege_pro_seite;


#Berechnung: Wieviele Seiten wird es geben
#Die Menge kommt aus der Datenbank
#Hier setzt ich die Menge mal auf 47
my $menge=47;
my $maxseite=$menge/$eintraege_pro_seite;

#Parameter 4:
#Dieser steht für die anzahl zwichen den Seitenzahlen, die bei einer großen Seitenmenge vorliegt.
#Sprich: 1 ... 5678 ... letzte
# :-) Nicht ändern, nachher findest du noch eine Bug, das wäre nciht schön!
my $x = blaettern("./dateiA.pl", "4", "$seite", "$maxseite");

print "<br /><br />";
print "<div align=\"right\"><b>Seite:</b> $x</div>";


dateiB:
Code: (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
#!/usr/local/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";

#Includes
use lib ('C:/Programme/xampp/htdocs/ptest');
use func;

#GET HOLEN
#Die Seitenzahl wird übergeben
#Wenn vorhanden $seite=übergabe
#Sonst $seite = die übergebene Seitenzahl
my $daten = $ENV{'QUERY_STRING'};;
my @formulardaten = split(/=/, $daten);
my $seite ="";
if($formulardaten[0] eq "") {
my $seite=1;
}
else {
$seite = $formulardaten[1];
}


#Werte für Blätterfunktion ermitteln
#Start und Eintraege_pro_seite wird für das Limit bei der Sql abfrage benötigt
my $eintraege_pro_seite = 8;
my $start=$seite * $eintraege_pro_seite - $eintraege_pro_seite;


#Berechnung: Wieviele Seiten wird es geben
#Die Menge kommt aus der Datenbank
#Hier setzt ich die Menge mal auf 47
my $menge=47;
my $maxseite=$menge/$eintraege_pro_seite;

#Parameter 4:
#Dieser steht für die anzahl zwichen den Seitenzahlen, die bei einer großen Seitenmenge vorliegt.
#Sprich: 1 ... 5678 ... letzte
# :-) Nicht ändern, nachher findest du noch eine Bug, das wäre nciht schön!
my $x = blaettern("./dateiB.pl", "4", "$seite", "$maxseite");

print "<br /><br />";
print "<div align=\"right\"><b>Seite:</b> $x</div>";


func.pm
Code: (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#Blätterfunktion
sub blaettern {
my $url=shift;
my $anhang="";
my $anzahl=shift;
my $seite=shift;
my $maxseite=shift;
my $get_name="seite";

$maxseite=int($maxseite+0.999);

if($url=~ /\?/ ) {
$anhang="&amp;";
}
else {
$anhang="?";
}

if($anzahl % 2 != 0) {
$anzahl++;
}

my $a = $seite-($anzahl/2);
my $b = 0;
my @blaetter;

while($b <= $anzahl) {
if($a > 0 && $a <= $maxseite)
{
push(@blaetter,$a);
$b++;
}
elsif($a > $maxseite && ($a-$anzahl-2)>=0)
{
splice(@blaetter);
$a -= ($anzahl+2);
$b = 0;
}
elsif($a > $maxseite && ($a-$anzahl-2)<0)
{
last;
}
$a++;
}

my $return = "";
my $count=@blaetter;

my $exists = grep /^1$/, @blaetter;
if($exists!=1 && $count > 1) {
my $exists = grep /^2$/, @blaetter;
if($exists != 2 && $anzahl ne $maxseite) {
$return .= "&nbsp;<a href=\"$url$anhang$get_name=1\">1</a>&nbsp;...";
}
else {
$return .= "&nbsp;<a href=\"$url$anhang$get_name=1\">1</a>&nbsp;";
}
}

foreach(@blaetter) {
if($_ == $seite) {
$return .= "&nbsp;<b>$_</b>&nbsp;";
}
else {
$return .= "&nbsp;<a href=\"$url$anhang$get_name=$_\">$_</a>&nbsp;";
}
}

$exists = grep /^$maxseite$/, @blaetter;
if($exists != 1 && $count > 1) {
my $max = $maxseite-1;
my $exists = grep /^$max$/, @blaetter;
if($max != 1) {
$return .= "...&nbsp;<a href=\"$url$anhang$get_name=$maxseite\">letzte</a>&nbsp;";
}
else {
$return .= "&nbsp;<a href=\"$url$anhang$get_name=$maxseite\">$maxseite</a>&nbsp;";
}
}


return ($return);

}


1;


Folgendes passiert mit use und require:
Aufruf von dateiA - OK
Aufruf von dateiB - Undefined subroutine

Neustart des Webservers:
Aufruf von dateiB - OK
Aufruf von DateiA - Undefined subroutine

Mache ich das ganze mit do,
Aufruf von dateiB - OK
Aufruf von dateiA - OK

Ich hoffe ihr könnt den Fehler finden,
Vielen Dank,
Michaela
Michaela
 2007-03-25 15:11
#9841 #9841
User since
2007-03-25
3 Artikel
BenutzerIn
[default_avatar]
Hallo nochmal,
ich habe von einem Bekannten gerade die Möglichkeit bekommen, diese Testscripte bie 1und1 Hochzuladen.

Und Siehe da es funktioniert mit use und require.

Es muss also irgendwas mit xampp unter Windows und mod_perl zu tun haben, die Frage ist nur, WAS :-),

Grüße Michaela
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-03-23 22:01.