Schrift
[thread]7060[/thread]

Objekt Funktionsadresse: Codereferenz auf Objektmemberfunktion



<< >> 4 Einträge, 1 Seite
Gast Gast
 2005-06-20 12:34
#55599 #55599
Hallo Community,
ich habe ein Problem mit folgendem Code, nachdem ich ein
Package draus machen wollte. Das Twig Modul möchte eine
Codereferenz haben, die ich im normalen Fall auch einfach
übergeben kann. Aber wenn ich ein Objekt erzeuge, dann muss
ich doch die Referenz auf die akutelle Instanz übergeben, oder?
Bei meinen bisherigen Versuchen habe ich entweder
"Not a Code Referenz" erhalten, oder innerhalb des "myhandler"
waren die Übergebenen Objekte nicht ansprechbar.
Muss man uU auch vorher etwas beachten?
Wie kann ich die Codereferenz der aktuellen Instanz übergeben?
Danke für eine Info,
Gruss aus Gronau
Frank
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
package mypck;

sub new
{
my $class = shift;
return bless $self;
}

sub myimport ()
{
my $self = shift;
my $twigimport= new XML::Twig( TwigHandlers =>
{ 'dataroot' => \&$self->myhandler} # hier muss die Referenzt auf myhandler übergeben werden.
);
$twigimport->parsefile( $filename );
}


sub myhandler
{
my $self = shift;
my( $twig, $elem)= @_;
my @aAVI = $elem->root->children;
[...]
}
Taulmarill
 2005-06-20 13:06
#55600 #55600
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
also, zu aller erst bau mal use strict; use warnings; ein.

ein funktionierender konstruktor würde in etwa so aussehen:
Code: (dl )
1
2
3
4
5
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}


eine gute einführung in OOP für Perl bietet "Einführung in Perl-Objekte, Referenzen & Module" (ISBN 3897211491).
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
kabel
 2005-06-20 23:03
#55601 #55601
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ich kenne XML::Twig nicht, aber du kannst ja eine anonyme subroutine erzeugen:
Code (perl): (dl )
sub { .. }

sowas wie objektmethoden kennt perl nicht, es sind ganz gewöhnliche methoden die halt zufällig als ersten parameter das objekt erhalten/erwarten.
-- stefan
Gast Gast
 2005-06-21 15:45
#55602 #55602
Brauchst du eine Object-Methode als Callback? Dann versuch mal

Code: (dl )
my $callback = sub { $object->methode; }


was eine CodeRef erzeugt, die eine Objektmethode aufruft
<< >> 4 Einträge, 1 Seite



View all threads created 2005-06-20 12:34.