Kurt: Klare Funktionsdefinitionen in Perl

Beitrag lesen

Hi

Das Verhalten von Subs lsst sich mit einer einfachen Regel beschreiben:

1. Bennante werden statisch definiert, das heit das jeweils letzte vorkommen im Text ist bindend ...(unabhngig von allen Klammern)
2. Anonyme Subs werden (natrlich) dynamisch definiert.
3. Die vorherigen Regeln fr Geltungsbereiche von Variablen sind zum jeweiligen Deklarationszeitpunkt voll gltig.

Ich finde wenn man umbedingt generisch programmieren mchte sind das gute Regeln.

Gru
  Kurt

PS: denkt euch bitte die Umlaute Emacs und Firefox haben unter Debian wohl Kommunikationsprobleme.

#[code lang=perl]

use strict;

sub gen {
 # benannte subs werden statisch angelegt,die letzte definition bestimmt.
 # deswegen dominiert hier das statisch letzte "nein"
 my $gen=shift;

if ($gen eq "JA") {
  sub sag {
   print "ja $gen\n"
  }
 }else {
  sub sag {
   print "nein $gen\n"
  }
 }

}

gen("JA");
sag();
gen("NEIN");
sag();
gen("JA");
sag();

=for OUTPUT:
nein JA
nein JA
nein JA

=cut

sub gen2 {
 # Anonyme subs werden dynamisch angelegt, per Typeglob in die
 # Symboltablle kann man sag auch dynamisch anpassen
 my $gen=shift;
 my $sub;

if ($gen eq "JA") {
  $sub=sub {
   print "ja $gen\n"
  }
 }else {
  $sub=sub {
   print "nein $gen\n"
  }
 };
 *sag=$sub;
}

gen2("JA");
sag();
gen2("NEIN");
sag();
gen2("JA");
sag();

=for OUTPUT:
ja JA
nein NEIN
ja JA

=cut

#[/code ]

0 54

Unklare Meldung

Thomas
  • perl
  1. 0
    Struppi
  2. 0
    Patrick Andrieu
    1. 0
      Thomas
      1. 0
        Horst
        1. 0
          Thomas
          1. 0
            Struppi
            1. 0
              Horst
        2. 0
          Manuel B.
      2. 0
        Patrick Andrieu
      3. 0
        Daniel Thoma
        1. 0
          Thomas
          1. 0
            Patrick Andrieu
            1. 0
              Thomas
              1. 0
                Struppi
                1. 0
                  Patrick Andrieu
                2. 0
                  Thomas
                  1. 0
                    Struppi
                3. 0
                  Thomas
        2. 0
          Thomas nochmal
          1. 0
            Daniel Thoma
  3. 0
    Thomas
    1. 0
      Struppi
      1. 0
        Thomas
        1. 0
          Struppi
          1. 0
            Thomas
            1. 0
              Struppi
              1. 0
                Thomas
                1. 0
                  Struppi
                2. 0
                  Daniel Thoma
            2. 0
              Siechfred
              1. 0
                Thomas
                1. 0
                  Siechfred
                2. 0
                  Struppi
                  1. 0
                    Thomas
                    1. 0
                      Struppi
                    2. 0
                      Siechfred
                      1. 0
                        Thomas
                        1. 0
                          Kurt
                          1. 0
                            Thomas
                            1. 0
                              Kurt
                              1. 0

                                Kurzversion

                                Kurt
                              2. 0
                                Thomas
                                1. 0
                                  Kurt
                                  1. 0
                                    Thomas
                                    1. 0
                                      Kurt
                                      1. 0
                                        Struppi
                                        1. 0
                                          Kurt
                                        2. 0
                                          Kurt
                                          1. 0
                                            Struppi
                                      2. 0

                                        Klare Funktionsdefinitionen in Perl

                                        Kurt
    2. 0
      Siechfred
      1. 0
        Thomas
        1. 0
          Siechfred