kleinerroemer: Object / Arrays

Hi Leute!
Ich programmiere seit einiger Zeit mit Perl und komme ganz gut damit zurecht.
Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.
( So eine Art Stack oder Containerklasse )
Ich kann mir das einfach nicht zusammenreimen.

Denke mal das es eigentlich recht einfach sein müsste, aber naja.

Schon mal danke im voraus,

lg.
Roman

  1. Hi Leute!
    Ich programmiere seit einiger Zeit mit Perl und komme ganz gut damit zurecht.
    Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.

    das liegt vielleicht daran, dass perl einfacher zu verstehen ist, als man eigentlich vermutet ;)

    hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]

    müsste dein Thema eigentlich abdecken, oder?

    Gruß, Alex

    1. hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]

      müsste dein Thema eigentlich abdecken, oder?

      Naja ganz glücklich bin ich damit nicht ;).

      In dem Bsp. wird ja mit der VCset Methode, eine neue Variable hinzugefügt, und benannt. Das könnte ich zwar auch mach und mir den namen mit einer internen Zählervariable ersparen, aber das finde ich nicht gerade schön.

      Ich suche nache einer Lösung die "so aussieht":

      sub addName
      {
        $this = shift;
        push( @{ $this -> { array } }, shift );
      }

      sub getName
      {
        $this = shift;
        return pop( @{ $this -> {array } } );
      }

      denke ich irgendwie umständlich oder so...?!?

      lg.

      1. Ich suche nache einer Lösung die "so aussieht":

        sub addName
        {
          $this = shift;
          push( @{ $this -> { array } }, shift );
        }

        sub getName
        {
          $this = shift;
          return pop( @{ $this -> {array } } );
        }

        denke ich irgendwie umständlich oder so...?!?

        Nein, das entspricht einem üblichen Objekt in Perl, nur must du noch eine "geblesste" Referenz erzeugen, so wie auf der gezeigten Seite beschrieben.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Nein, das entspricht einem üblichen Objekt in Perl, nur must du noch eine "geblesste" Referenz erzeugen, so wie auf der gezeigten Seite beschrieben.

          »»

          Ah jetzt wo ich das mit der geblessten referenz überprüft habe, hab ich einen kleinen fehler im Konstruktor gefunden. Funktioniert jetzt mit genau dem Code den ich vorher beschrieben habe.

          Danke für die Hilfe

      2. hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]

        müsste dein Thema eigentlich abdecken, oder?

        Naja ganz glücklich bin ich damit nicht ;).

        In dem Bsp. wird ja mit der VCset Methode, eine neue Variable hinzugefügt, und benannt. Das könnte ich zwar auch mach und mir den namen mit einer internen Zählervariable ersparen, aber das finde ich nicht gerade schön.

        Ich suche nache einer Lösung die "so aussieht":

        sub addName
        {
          $this = shift;
          push( @{ $this -> { array } }, shift );
        }

        sub getName
        {
          $this = shift;
          return pop( @{ $this -> {array } } );
        }

        denke ich irgendwie umständlich oder so...?!?

        lg.

        Habe leider nicht mein Perl-Buch zur Seite.

        Du suchst aber, wie die Arrays in Perl behandelt werden müssen, oder?

        1. Du suchst aber, wie die Arrays in Perl behandelt werden müssen, oder?

          Nur wie ich es im Objekt behandle!

          Hat sich aber jetzt eh schon erübrigt.

          Der Code von Sichfrid triffts sehr gut!

  2. Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.

    Ein Objekt ist zunächst nichts anderes als eine Hashreferenz, die mittels bless an ein Objekt gebunden wird. Lies dir hierzu bitte perlref durch, um den Aufbau zu verstehen. Mal ein simples Beispiel, das es verdeutlicht:

    package MyArray;  
      
    sub new {  
      # Objektname  
      my $pkg = shift;  
      # Hashreferenz mit einer  
      # Arrayreferenz als einziges Element  
      my $ref = { myArray => [] };  
      # Binde die Referenz an den Objektnamen  
      return bless $ref, $pkg;  
    }  
      
    sub addElement {  
      my $obj = shift;  
      # hinzuzufuegendes Element  
      my $elm = shift;  
      # Element hinzufuegen  
      push @{$obj->{myArray}}, $elm;  
    }  
      
    sub getElement {  
      my $obj = shift;  
      # Indexnummer des gesuchten Elements  
      my $index = shift;  
      # Inhalt zurueckgeben oder  
      # undef, wenn Element nicht existiert  
      return $obj->{myArray}->[$index] || undef;  
    }
    

    Im Einsatz:

    use strict;  
    use diagnostics;  
    use MyArray;  
      
    # Objektinstanz  
    my $arr = MyArray->new;  
    # Hinzufuegen von zwei Elementen  
    $arr->addElement('foo');  
    $arr->addElement('bar');  
    # Ausgabe des 2. Elements  
    print $arr->getElement(1) || 'Kein Element';
    

    Ich hoffe, dass es so verständlich ist, ansonsten frage nochmal nach.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Danke vielmals. Haut bei mir jetzt eh schon hin! nur versteh ich nach deinem bsp. das bless besser ;)
      danke für das gute bsp, hats voll getroffen. Meines sieht jetzt eh "gnau so" aus.