Schrift
[thread]13035[/thread]

Bei Abfrage des Rückgabewerts aus einer Subroutine gibts Fehler... (Seite 3)

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Brenner
 2009-01-22 15:45
#118256 #118256
User since
2009-01-13
87 Artikel
BenutzerIn
[default_avatar]
@Linuxer:

Dank der deiner Kommentare denke ich dein Programm etwas verstehe.


Für mich noch nicht klar ist aber, wenn ich im Hauptprogramm z.B.

my $log = test::log2->new(
# {
# write_logfile => 0, # 0 => nein, 1 => ja
# logfilename => 'logfile',
# logfile_path => 'C:/WINNT/system32/config',
# }
);

übergebe, also keine Werte, dann kommt in der Ausgabe die "hashmeldung" und nicht der defaultwert der dann einspringen sollte.
renee
 2009-01-22 17:04
#118259 #118259
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann zeig mal, wie Deine new-Methode aussieht
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Brenner
 2009-01-22 17:06
#118261 #118261
User since
2009-01-13
87 Artikel
BenutzerIn
[default_avatar]
Habs doch noch gelöst, einfach die { } nicht auskommentieren ;-)


Kannst du mir bitte die Subroutine erklären damit ich weiter komme.
Ich rufe im Hauptprogramm ja die Subroutine zum ausgeben auf, aber woher bekommt diese hier ihre Werte, ich habe doch keine mit übergeben an der Stelle sondern nur bei "new"?


Code (perl): (dl )
1
2
3
4
5
6
7
sub logfile_name {
  my ( $self, @args ) = @_;

  return $self->{logfile_name} if exists $self->{logfile_name};

  return undef;
}



edit:
Ok, dumm geschaut, also die Subroutine hat über "{logfile_name}" ihren Wert bekommen, ABER trotzdem, wie genau in dem String
Code (perl): (dl )
  return $self->{logfile_name} if exists $self->{logfile_name};


wird das gehandhabt. Der erste "self" Aufruf, woher bekommt er die Werte und hbeduetet der zweite "self" Aufruf das er die Defaultwerte die unter "new" stehen nimmt falls beim ersten "self" keine vorhanden sind?
styx-cc
 2009-01-22 22:05
#118265 #118265
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
sub logfile_name {
#das aufrufende objekt ist der erste parameter und wird in $self gespeichert
  my ( $self, @args ) = @_;

#gebe $self->{logfile_name} zuruecke, wenn $self->{logfile_name} existiert
  return $self->{logfile_name} if exists $self->{logfile_name};

# hier kommen wir nur an, wenn das voherige return nicht ausgefuehrt wurde
  return undef; #gebe undef zurück, hier koenntest du z.B. deinen defaultwert
#eintragen: return "server_log.log";
}


return undef; wird also nur ausgefuehrt, wenn du nicht irgendwoanders ueber einen setter oder den konstruktor oder... einen wert fuer $self->{logfile_name} initialisiert (bestimmt) hast

ich hoffe das hilft ein wenig
Pörl.
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2009-01-22 12:26.