Schrift
[thread]12608[/thread]

Perl 5.6.1 (Pakete, Bibliotheken und Module)

Leser: 1


<< >> 7 Einträge, 1 Seite
suliko
 2008-10-09 16:55
#115324 #115324
User since
2006-04-26
23 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich stehe auf dem Schlauch... :(

Zuerst aber die Dateistruktur:


/home/user/cgi/Funcs/errors.pm
/home/user/cgi/Funcs/others.pm

/home/user/cgi/Vars/errors.pm
/home/user/cgi/Vars/others.pm

/home/user/cgi/script.cgi


Ich möchte in der Datei script.cgi eine &Error::Trace() Funtion aufrufen und zwar dann, wenn sie definiert ist.

In diesem Fall sollte die Funktion meiner Meinung nach wegen des Kommentars nicht aufgerufen werden, oder?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
...

# script.cgi
#
use package Funcs::others;
#use package Funcs::errors;

if (defined &Error::Trace) {&Error::Trace();}

&Betta::Hallo();
...


Im Package others.pm rufe ich die &Error::Trace() auf:

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
...

# others.pm
#

use package errors;

package Alpha;

sub Hallo {

 &Error::Trace();

 return 0;

};

pacage Betta;

sub Hallo {

 # irgendwas
 
 return 0;

};

1;


Also, beim Aufrufen des script.cgi spielt meine if-Afrage keine Rolle. &Error::Trace() in der Zeil 8 wird immer ausgeführt...

Danke für die Tipps.
:::bona mente:::
lichtkind
 2008-10-09 20:19
#115341 #115341
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
alsoe erstmal

Code (perl): (dl )
&Error::Trace();

ist veraltet nimm besser

Code (perl): (dl )
Error::Trace();


Error:
Code (perl): (dl )
pacage Betta;


mach dir bitte bewusst das use schon zur einlesezeit ausgeführt wird. ansonst hab ich deine frage glaub ich nicht ganz verstanden.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
nepos
 2008-10-09 20:20
#115342 #115342
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Btw, use strict; und use warnings; solltest du auch benutzen.
moritz
 2008-10-09 20:48
#115345 #115345
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
lichtkind+2008-10-09 18:19:23--
Error:
Code (perl): (dl )
pacage Betta;


mach dir bitte bewusst das use schon zur einlesezeit ausgeführt wird.


... und dass es package heisst ;-)
Linuxer
 2008-10-09 21:31
#115349 #115349
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
Quote
use package errors;
...
&Error::Trace();


Fehlt mir die Kreativität, das use package errors; zu verstehen und später den Aufruf von Error::Trace korrekt zuzuordnen? Welche Magie ist da am Werke? Oder lesen da auch andere mindestens einen Logikfehler (in Kombination mit einem Syntaxfehler (spätestens bei Verwendung von 'use strict') raus?

*grübel* Könnte man das nicht mit einem Block-eval lösen? Oder wäre das zu "unschön"?

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
#!/usr/bin/perl -l
use strict;
use warnings;


package Error;

sub Trace {
    print "Error::Trace called!";
}

1;


package main;

eval { Error::Trace(); };
# wenn Error::Trace() nicht definiert ist, kann man @! auswerten!
print "eval fetched: $@" if $@;


eval { Error::NotExistent(); };
print "eval fetched: $@" if $@;

__END__
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!
lichtkind
 2008-10-09 22:46
#115353 #115353
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
das meinte ich das es package heisst, aber

use package errors; geht nu gar nicht.

um verwirrung zu vermeiden benennst du das package am besten identisch mit der datei, denn bei use werden dateinamen angegeben aber wenn eine sub rufst musst den apckagenamen angeben, solang das modul nichts in den aktuellen namespace exportiert hat.

wenn dein modul im Funcs/errors.pm liegt musst es ja von script.cgi aus als use Funcs::errors rufen und dann auch funcs::errors::subname. oder du schaust dir mal CPAN:base oder CPAN:parent an.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
MatthiasW
 2008-10-10 01:23
#115356 #115356
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
lichtkind+2008-10-09 20:46:22--
das meinte ich das es package heisst, aber

use package errors; geht nu gar nicht.

Naja, das geht schon.

Angenommen man schreibt es vor use strict; und vor use warnings; damit der "Bareword"-Fehler und die "Unquoted string"-Warnung nicht kommen, kann man durchaus das Pragma package laden und an die dort definierte import() Routine "errors" übergeben.

Dennoch ist es ziemlich unwarscheinlich und auf jeden Fall sollte errors in Anführungsstriche gesetzt werden.

MfG

PS: Der Beitrag ist nicht ganz ernst zu nehmen ;)
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< >> 7 Einträge, 1 Seite



View all threads created 2008-10-09 16:55.