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

Fehler beim Einbinden eines Modules: Ka wieso das so ist (Seite 3)

Leser: 3


<< |< 1 2 3 4 5 6 >| >> 59 Einträge, 6 Seiten
pq
 2003-08-19 19:04
#73647 #73647
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=SirLant,19.08.2003, 16:50]Wenn ich nen Objekt nur dazu brauche um in den anderen namensraum "einzudringen", sprich die Funktionen von dort zu benutzen, kann ich den Konstruktor, dann einfach so schreiben:

sub new {
my $class = @_;
return( bless ($class));
}

Wenn das Modul PseudEcom heißt, kann ich das ja dann so aufrufen:

$peh = PseudEcom->new();

$peh->funktion();[/quote]
dazu brauchst du noch nicht mal ein objekt. denn
du willst ja anscheinend keine daten haben, sondern nur
die funktionen benutzen. also einfach
my $result =  PseudEcom->funktion();

edit:
das ist ausserdem viel sauberer, denn ein objekt
zu erstellen, dass gar keine daten enthält, ist u.U.
verwirrend. merke: code schreibt man nicht für sich,
sondern für den maintainer, also für andere leute.\n\n

<!--EDIT|pq|1061305577-->
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
SirLant
 2003-08-19 21:31
#73648 #73648
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ok, du hast eigentlich recht, aber ich müsste immer WebDB::PseudEcom davor schreiben, da könnt ich auch gleich die Funktionen aus dem anderen namensraum so direkt aufrufen.
Deshalb die Klasse.

Habe aber gerade nen anderes Problem:
Quote
Cant modify non-lvalue subroutine call in concatenation (.) or string at line 194, near &quot;)&quot;


Die besagte Zeile:
Code (perl): (dl )
1
2
3
&#36seite .= p ("Ein Fehler ist aufgetreten.")
       .= p (escapeHTML (&#36text))
       . p ("Zurück zur PseudEcom "  . home_link ("Homepage"));

Es ist die Zeile mit dem aufruf von home_link.
Ich weiß nicht was der Fehler sein soll.
Die Funktion sieht so aus:
Code (perl): (dl )
1
2
3
4
5
6
sub home_link
{
my &#36bez = shift;

    return (create_link (full_url ("index.cgi"), &#36bez));
}


die Unterfunktionen, die dazu noch benötigt werden:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub haupt_url
{
my &#36url_prefix;

    (&#36url_prefix = url ()) =~ s|[^/]*&#36||;
    &#36url_prefix =~ s/^https:/http:/i;    # https -> http
    return (&#36url_prefix);
}
sub full_url
{
my &#36script = shift;

    return (haupt_url () . &#36script);
}
sub create_link
{
my (&#36url, &#36bez) = @_;

    &#36bez = &#36url unless &#36bez;
    return (a ({-href => &#36url}, escapeHTML (&#36bez)));
}
\n\n

<!--EDIT|SirLant|1061314425-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-08-19 22:09
#73649 #73649
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Quote
$seite .= p ("E") .= p ("e") . p ("e");

ist das gleiche wie
Quote
$seite .= p ("E") = p("E") . (p ("e") . p ("e"));

ist das gleiche wie
Quote
$seite = $seite . (p ("E") = p("E") . (p ("e") . p ("e")));

=> du weist einer subroutine einen wert zu ohne diese als lvalue-subroutine deklariert zu haben => <!--pod1--><a href="http://www.perldoc.com/perl5.8.0/pod/perlsub.html" target="_blank">perldoc <!--pod2-->perlsub<!--pod3--></a><!--pod4-->

du meinst wahrscheinlich:
Quote
$seite .= p ("E") . p ("e") . p ("e");


HTH
-- stefan
SirLant
 2003-08-19 22:19
#73650 #73650
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ok danke, habs jetzt :)
Aber habe jetzt nen neuen Fehler, er findet die Funktionen mal wieder nicht, aber dieses mal ist es anderst:

Quote
Can't locate object method dokumente_link via package[..]

Heißt das wieder, dass er das Modul nicht findet?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-08-19 22:43
#73651 #73651
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
übersetze den text doch einfach:
im package [...] ist keine funktion dokumente_link deklariert worden. => namen checken.
-- stefan
SirLant
 2003-08-19 22:46
#73652 #73652
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Das ist ja das komische, die namen sind ja gleich und es geht nicht, habe eben den namen sogar kopiert, geht aber trotzdem nicht :(
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-08-19 23:16
#73653 #73653
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
das kann nicht sein. check nochmal das modul: hat es eine package deklaration? evaluiert es zu true? benutzt du das richtige ™ package?
-- stefan
SirLant
 2003-08-19 23:23
#73654 #73654
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Habe das Modul sogar einmal direkt zu der Datei gelegt, aber der Fehler ist noch da, mal sehen was da noch nicht stimmen könnte.
Lansgsam verliere ich aber echt die Lust, das noch
weiterzuschreiben, wenn es eh nicht funktioniert :(

Edit:
Dieses mal findet er new nimmer, nachdem ich die Änderung wieder rückgängig gemacht habe(das Modul wieder in nen Unterordner)

Edit2:
So new findet er wieder, aber dokumente_link mal wieder nicht mehr.
Das ist doch zum verrückt werden

Edit3:
Hier mal die beiden Dateien, vllt. findet wer von euch den Fehler, ich bin mit meinem Latein am Ende.
Hier klicken
Hoffe Zip ist euch recht, denke das können die meisten öffnen.\n\n

<!--EDIT|SirLant|1061322205-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-08-20 00:03
#73655 #73655
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
??? da fehlt die WebDB.pm
guck dir mal den konstruktor von WebDB::PseudEcom an. my $class = @_; was ist daran falsch? :p\n\n

<!--EDIT|kabel|1061323439-->
-- stefan
SirLant
 2003-08-20 00:13
#73656 #73656
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Die WebDB.pm hab ich weggelassen, ist nur für DB-Aufbau, das braucht man im mom noch nicht.
Da hätt ich auch erst PW+Login usw. rausnehmen müssen.

Aber das ist wirklich nen dummer Fehler, kommt vom kopieren , hab da die zweite Variable einfach gelöscht
Hm ,wenn ich da my ($class) = $_[0]; mache, dann ändert sich der Fehler nur in, den dass er tierpflege_link nicht findet :(\n\n

<!--EDIT|SirLant|1061324113-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
<< |< 1 2 3 4 5 6 >| >> 59 Einträge, 6 Seiten



View all threads created 2003-08-17 23:34.