Philipp Hasenfratz: Referenzieren / Objekte

Beitrag lesen

Halihallo bleau

ich möchte in einer pl datei ein obj. einer Klasse erzeugen und dieser Klasse durch den konstruktor ein objekt übergeben (in diesem Fall $cgi)

Willst du die Funktionsweise von CGI einfach nur erweitern, oder übernimmt die Klasse
auch noch andere Aufgaben? - Falls ersteres der Fall ist, wäre ein Erweitern der Klasse
sinnvoller.

sub new()

"sub new ()" - Konstrukte sind nur sinnvoll, wenn man Prototyping (und dafür sind die
Klammern gedacht) auch verwendet. Ansonsten ist "sub name {}" die korrekte Syntax.

{
      my $class = shift;
      my $self = {};
      $self->{cgi} = shift;

Ich würde nicht so viele "shift"'s machen:

sub new {
   my ($class,$cgi) = @_;
   bless( {cgi=>$cgi}, $class );
}

macht das selbe.

möchte ich aber jetzt innerhalb einer Methode (innerhalb der Klasse my_class)
auf die methoden des cgi-Objektes zugreifen weis ich mir keinen rat!?

sub my_sub {
   my ($self) = @_;
   my %request = $self->{cgi}->Vars();
}

Beachte: $self->{cgi} ist ein Skalar, der eine Instanz des CGI-Moduls referenziert.
An Methoden oder Hash-values kommst du nur über einen dereferenzierenden Zugriff.
Will heissen:

$self->{cgi}{Vars} gibt es nicht. $self->{cgi}->{Vars} ist der korrekte dereferenzierte
Zugriff. Um dann an einen Wert des referenzierten Hashes zu kommen:

$self->{cgi}->{Vars}->{name}

denn auch Vars ist ein _referenzierter_ Hash, kein normaler. Merke einfach: Für eine
Referenz verwende "->" gefolgt vom "normalen" Zugriff (also ->{} für Hash, ->[] für
Arrays).

perldoc perldata
perldoc perlreftut
perldoc perlboot
perldoc perltooc
perldoc perldsc
perldoc perllol

Falls du dich in die Sache etwas einlesen möchtest, was ich sehr empfehle.

Viele Grüsse

Philipp

--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.