Chrisi: Object Referenz verschachteln

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

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

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. 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

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

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

        --
        _ - jenseits vom delirium - _

           Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
        1. 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

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".