Kurt: Konzept der Namensräume; Global, Dynamic und Lexical Scope

Beitrag lesen

Hi

Ich habe irgendwo mal gelesen, dass my und our als lexikalisch bezeichnet wurden, obwohl our ja nur am Rande was mit den lexikalischen Variablen zu tun hat (schließlich sind's ja eigentlich Packagevariablen). Darum hielt ich es für betonenswert, dass die Unterscheidung nur für my-Variablen gilt.

Einverstanden?

jaaa ... diese "lexical" Terminologie ist auch wirklich nervig!

My und Our haben AFAIK einen "lexical scope", was bedeutet das eine our-deklaration nur innerhalb seines Blockes gilt. Statt "lexical variable" - was auch in den Perl-Fehlermeldungen erscheint würd ich lieber von "privaten Variablen" reden. (halt privatbesitz des lexical scopes)

Ich habe selbst auch diese Tage begriffen was "our" von einer ohne "use strict" undeklarierten Packagevariablen unterscheidet.

Im folgenden Beispiel erstrecken sich der scope der mit our deklarierten Variablen über mehrere package- Anweisungen. Deswegen ist es wichtig zu betonen das our einen lexical scope hat, noch wichtiger wäre die Leute würden gleich defensiv klammern. Bei "use vars" hingegen ist das Verhalten wie ohne strict.

  
use strict;  
use warnings;  
  
package drei;  
our ($x,$y);  
  
package zwo;  
use vars qw{$x $y };  
  
package main;  
our ($x);  
use vars qw { $y };  
($x,$y)=("main","main");  
  
{ package zwo;  
 $y="zwo";  
 $x="zwo";  
}  
  
{ package drei;  
 $y="drei";  
 $x="drei";  
}  
  
# hier wieder package main  
  
  
$\="\n";$,=",";  
  
print def($x), def($y);             #: drei,drei  
print def($main::x), def($main::y); #: drei,undef  
print def($zwo::x), def($zwo::y);   #: undef,undef  
print def($drei::x), def($drei::y); #: undef,drei  
  
  
  
sub def{  
 # value or undef  
 if (defined $_[0]) {  
  return $_[0];  
 }else {  
  return "undef" ;  
 }  
}  
  

Tschau
  Kurt

0 80

Frage zu packages

Connie
  • perl
  1. 0
    Patrick Andrieu
    1. 0
      Connie
      1. 0
        Connie
        1. 0
          Patrick Andrieu
          1. 0
            Struppi
            1. 0
              Patrick Andrieu
              1. 0
                Struppi
                1. 0
                  Patrick Andrieu
            2. 0
              Connie
              1. 0
                Connie
    2. 0
      Connie
    3. 6

      Konzept der Namensräume; Global, Dynamic und Lexical Scope

      Siechfred
      1. 0
        Connie
      2. 0
        Connie
        1. 0
          Patrick Andrieu
          1. 0
            Connie
            1. 0
              Patrick Andrieu
              1. 0
                Connie
                1. 0
                  Connie
                  1. 0
                    Struppi
                    1. 0
                      Connie
                      1. 0
                        Struppi
                        1. 0
                          Connie
                          1. 0
                            Struppi
                            1. 0
                              Connie
                              1. 0
                                Struppi
                                1. 0
                                  Connie
                                  1. 0
                                    Struppi
                                    1. 0
                                      Connie
                                      1. 0
                                        Struppi
                                      2. 0
                                        Struppi
                                      3. 0
                                        Patrick Andrieu
                                        1. 0
                                          Struppi
                                          1. 0
                                            Kurt
                                            1. 0
                                              Struppi
                                              1. 0
                                                Kurt
                                                1. 0
                                                  Struppi
                                                  1. 0
                                                    Kurt
                                                    1. 0
                                                      Kurt
                                                      1. 0
                                                        Thomas
                                                        1. 0
                                                          Siechfred
                                                          1. 0
                                                            Kurt
                                                            1. 0
                                                              Siechfred
                                                              1. 0
                                                                Kurt
                                                        2. 0
                                                          Kurt
                                                          1. 0
                                                            Kurt
        2. 0
          Siechfred
      3. 0
        Patrick Andrieu
        1. 0
          Kurt
      4. 0
        Kurt
        1. 0

          my erzeugt keinen Packagevariablen!

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

              Konzeption...

              Patrick Andrieu
              • menschelei
            2. 0
              Kurt
              1. 0
                Siechfred
                1. 0
                  Kurt
  2. 0
    Kurt
    1. 0
      Kurt
    2. 0
      Struppi
      1. 0
        Kurt
      2. 0
        Interessierter Leser
        1. 0
          Interessierter Leser
          1. 0

            Coping with Scoping

            Kurt
        2. 0
          Kurt
  3. 0

    Zusammenfassende Darstellung, Kritik willkommen!

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

                  1 Klasse= 1 Modul ?

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