Conni: Anfängerfrage zu Packages

Hallöchen,
ich versuche mich gerade an Perl und hänge bei den Packages fest.
Folgender Code:

package Blubb;

sub new {
 $zeiger={};
 bless($zeiger);
}

sub schreibe {
 $text = shift;
 print $text;
}

$my_obj = Blubb->new();
$my_obj->schreibe("hallo welt");

Wieso ist die Ausgabe nicht "hallo welt" sondern "Blubb=HASH(0x1e1a34c)"
Komme einfach nicht dahinter.

  1. Moin!

    Wieso ist die Ausgabe nicht "hallo welt" sondern "Blubb=HASH(0x1e1a34c)"

    Weil der erste Parameter die Klasse ist.

    Bau ein my $class= shift; als erstes in print ein.
    -- Skeeve

    1. Moin!

      Sorry! in "schreibe" natürlich!

      sub schreibe {
        my $class= shift;
        my $text= shift;

      -- Skeeve

      1. Moin!

        Sorry! in "schreibe" natürlich!

        sub schreibe {
          my $class= shift;
          my $text= shift;

        -- Skeeve

        Vielen Dank für die Hilfe!
        Also es funktioniert zwar aber ich habe nicht verstanden wieso. Was meinst du mit: der erste Parameter ist die Klasse?

        1. Hallo Conni,

          weisst du was objektorientierte Programmierung ist? Weisst du was der Unterschied ist zwischen einem Objekt und einem Package? Ein Package wird auch manchmal Namespace genannt. Diese Begriffe solltest du dir bestens klar machen, um wirklich zu verstehen, was in deinem Code passiert.

          Trotzdem hier mal eine kurze Erklärung, vielleicht reicht es für den Anfang oder bringt dich auf die richtige Fährte.

          Hier ist dein Code:

          package Blubb;

          sub new {
           $zeiger={};
           bless($zeiger);
          }

          sub schreibe {
           $text = shift;
           print $text;
          }

          $my_obj = Blubb->new();
          $my_obj->schreibe("hallo welt");

          Was du hier machst ist ein Blubb Objekt zu instantieren (eine Seele einzuhauchen, wie der "bless" Befehl so schön sagt) und dann die Methode "schreibe()" aufzurufen. Es ist nun mal Perl Konvention, dass wenn die die Methode eines Objektes aufrufst der erste Parmeter eine Referenz auf das Objekt selbst ist. In java gibt es das "this", in Perl ist es der erste Parameter.

          Du könntest auch die schreibe() Routine im Package Blubb aufrufen ohne ein Blubb Objekt zu instantieren, nämlich so:

          Blubb::schreibe("hello");

          Dann funktioniert es wie du es erwarten würdest.

          Zum Thema objektorientertes Perl empfehle ich das Buch "Object Oriented Perl" von Damien Conway.

          Gruß,
          Cruz

  2. ich versuche mich gerade an Perl und hänge bei den Packages fest.

    Als Tipp: http://perldoc.perl.org/
    du hast perldoc auch bei dir auf der Festplatte, wenn du Perl Installiert hast.
    Eine sehr umfangreiche Dokumentation wo alles erklärt wird. Du gehst für eine(n) Anfänger sehr weit.

    Folgender Code:

    package Blubb;

    sub new {
    $zeiger={};
    bless($zeiger);
    }

    Vielleicht erstmal das http://perldoc.perl.org/perlboot.html

    Komme einfach nicht dahinter.

    Lesen, lesen.....

    Struppi.

    --
    Javascript ist toll (Perl auch!)
  3. Hell-O!

    Komme einfach nicht dahinter.

    Ergänzend zu den bisherigen Hinweisen empfand ich seinerzeit den SELFHTML-Abschnitt Objektorientiertes Programmieren in Perl zum Einstieg in die Materie als sehr hilfreich.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Welcome To Carcass Cuntry || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.