Object Referenz verschachteln
Chrisi
- perl
Hi zusammen,
ich steige gerade in die Perler Welt ein und versuche seit "knapp 1 Stunde :-)" meine Variablen in einem Object zur Verfügung zu stellen, was ich aber nicht auf die Reihe bekomme :-)
sub new {
my $class = shift;
my $parent = shift;
my $self = {
_bin => (
'rm' => '/bin/rm',
'cp' => '/bin/cp'
)
};
bless $self,$parent;
return $self;
}
sub test {
my $self = shift;
print $self->{'_bin'}->{'cp'};
}
Beim Aufruf von $obj->test soll /bin/cp ausgegeben werden.
Kann mir da jemand sagen wie man es richtig anstellt?
Danke und Grüße
Chrisi
Hallo Chrisi!
my $self = {
_bin => (
'rm' => '/bin/rm',
'cp' => '/bin/cp'
)
};
Anonyme Hashs grundsätzlih in geschweite Klammern schreiben:
my $self = {
_bin => {
'rm' => '/bin/rm',
'cp' => '/bin/cp'
}
};
bless $self,$parent;
Ja, und wo kommt $parent her, bzw. wo wird es an new übergeben?
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
Anonyme Hashs grundsätzlih in geschweite Klammern schreiben:
Ok neuer Versuch:
sub new {
my $class = shift;
my $self = {
_test => 'wert',
_bin => (
'rm' => '/bin/rm',
'cp' => '/bin/cp'
)
};
bless $self,$class;
return $self;
}
sub test {
my $self = shift;
print "Klappt: " . $self->{'_test'};
print "Klappt nicht: " . $self->{'_bin'}->{'xm'};
}
Die geschweiften Klammern habe ich gesetzt, es sieht aus meiner Sicht auch alles "richtig" aus. Vermutlich versuche ich falsch auf $self->{'_bin'}->{'xm'} zuzugreifen?
$parent habe ich hier ganz rausgenommen und durch $class ersetzt. In Parent war der Name der Mutterklasse.
Viele Grüße
Chrisi
Hoi.
print "Klappt: " . $self->{'_test'};
print "Klappt nicht: " . $self->{'_bin'}->{'xm'};
Könnte womöglich damit zusammenhängen, dass Du $self->{'_bin'}->{'xm'} nirgends gesetzt hast?!
Außerdem verwende folgendes, hilft beim Durchblick:
use Data::Dumper;
print Dumper($self->{'_bin'});
Grüße
Hallo Chrisi!
my $class = shift;
my $self = {
_test => 'wert',
_bin => (
^ _hier_ geschweifte Klammer, keine Runde!!!
'rm' => '/bin/rm',
'cp' => '/bin/cp'
)
^ _hier_ auch!!!
};
bless $self,$class;
return $self;}
Vermutlich versuche ich falsch auf $self->{'_bin'}->{'xm'} zuzugreifen?
Du hast keinen Key namens 'xm'.
Viele Grüße aus Frankfurt/Main,
Patrick
Moin Moin!
Und wenn wir schon dabei sind: Die ersten drei Zeilen eines Perl-Scripts sollten
#!/usr/bin/perl
use strict;
use warnings;
sein, wenn wir über CGI- oder SUID-Kontext reden, gehört hinter das perl in der ersten Zeile noch ein "-T".
DANACH können wir über Probleme aller Art reden.
Alexander