Schrift
[thread]6699[/thread]

verstaendnisfrage zu return



<< >> 6 Einträge, 1 Seite
Rambo
 2005-02-12 20:17
#51651 #51651
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Hallo,

ich habe folgendes beispiel script und suche ein erklärung
warum dies so ist
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use strict;
use warnings;

for (@ARGV) {
   if(/stop/i){
   &stop;
   }
   if(/start/i){
   &start;
   }
}


sub start
  {
  my ($TARGET, $NAME) = initialize();
  print "$TARGET\n";
  #print "$VER\n";
  print "$NAME\n";
  }

sub stop
  {
  my ($TARGET, $VER, $NAME) = initialize();
  print "$TARGET\n";
  print "$VER\n";
  print "$NAME\n";
  }
 
sub initialize
  {
  my $VER = "1.0";
  my $TARGET = "ON";
  my $NAME = "fritz";
  return ($TARGET, $VER, $NAME);
  }

in folgendem code bei start $VER nicht benötigt bei stop muss
es aber drin sein. warum werden bei start nicht $target und
$name ausgegeben sondern $var und $target?
vorallem ist $name nicht fritz sondern $ver!
möchte es verstehen warum dies so ist.

fürti rambo
sri
 2005-02-12 20:34
#51652 #51652
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Rambo,12.02.2005, 19:17]
Code: (dl )
1
2
3
   my ($TARGET, $NAME) = initialize();

return ($TARGET, $VER, $NAME);
[/quote]
Weil du eine Liste zurueckgibst und nur die ersten zwei elemente einfaengst.

Mit nem slice gehts.
Code: (dl )
   my ($target, $name) = (&initialize)[0, 2];


Upper case variablen namen sind uebrigens pfui!
renee
 2005-02-12 20:36
#51653 #51653
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest auch bei start $VER "anfordern", sonst rutscht das 1.0 in $NAME (der Methode start) und nicht das "fritz"...

Mit dem return gibst Du eine Liste von Parametern zurück. In der start()-Methode erwartest Du eine Liste von Parametern. Jetzt wird es so gemacht, dass in die erste Variable, die Du erwartest, die erste Variable, die zurückgegeben wird, geschrieben wird...

Also das $Target aus der initialisiere()-Methode wird in das $Target, was Du in der start()-Methode stehen hast, geschrieben...

Das zweite Element, was zurückgegeben wird, wird in die zweite Variable geschrieben, die Du erwartest! So geht das die ganze Zeit.

Solltest Du mehr Elemente erwarten, als die aufgerufene Methode zurückliefert, so ist dieses Element, was zuviel ist, undef.

Bsp:
Code: (dl )
1
2
3
4
5
my ($var1, $var2) = methode();

sub methode{
return "hallo";
}


Jetzt ist $var2 undef.

Wenn Du mehr Elemente zurückgibst, als erwartet werden (wie bei Dir in der start()-Methode), dann verschwinden die "überschüssig" zurückgegebenen Elemente im Nirwana.

Da wirst Du keine Fehlermeldung bekommen...
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/
Rambo
 2005-02-12 20:42
#51654 #51654
User since
2003-08-14
803 Artikel
BenutzerIn

user image
warum ist upper case pfui?

danke schön jetzt verstehe ich es besser!
das mit slice werde ich auch noch mal probieren!

merci rambo\n\n

<!--EDIT|Rambo|1108233818-->
renee
 2005-02-12 20:48
#51655 #51655
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es ist üblich, Variablennamen klein zu schreiben. Ausnahmen sind eigentlich nur "besondere" Variablen (wie @ARGV) und Konstanten...

bei kleinen Listen mache ich es häufig so:
Code: (dl )
1
2
3
4
5
6
7
my ($var1, undef, $var2) = methode();

sub methode{
my $ret1 = "hallo";
my $ret2 = "welt";
my $ret3 = "!";
return ($ret1,$ret2,$ret3);
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/
Rambo
 2005-02-12 20:51
#51656 #51656
User since
2003-08-14
803 Artikel
BenutzerIn

user image
und schon wieder was gelernt :-)
werde den hinweis für die zukunft beherzigen und klein
schreiben!
<< >> 6 Einträge, 1 Seite



View all threads created 2005-02-12 20:17.