Re: Gültigkeit von "my"-Variablen in Blöcken? - genau da ,-) - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 30.Juli.2002, 16:01.
    Re: Gültigkeit von "my"-Variablen in Blöcken? - genau da ,-)

      Du schreibst es eigentlich schon im Titel: ;-)

      Mit "my" deklarierte/definierte Variablen sind immer innerhalb eines Blockes gültig -> Was ist ein Block? Einfach alles was innerhalb geschweifter Klammern steht. Konkret: Von dem Punkt an dem die Var. definiert wird nach oben gehen bis man auf eine geöffnete geschweifte Klammer trifft und die dazugehörige schliessende geschweifte Klammer suchen - innerhalb dieses Bereichs ist diese Var. sichtbar, d.h. auch in eingeschlossenen weiteren Blöcken. Wird da drin irgendwo eine Subroutine aufgerufen ist diese "my"-Var. innerhalb der Sub aber (natürlich?) nicht sichtbar...

      Für Deine Beispiele heisst das:

      1) $anz_bild ist nur innerhalb des "if"s gültig (innerhalb der geschweiften Klammern)

      2) Alle innerhalb der while-Schleife mit "my" definierten Vars sind nur innerhalb der while-Schleife gültig (innerhalb der geschweiften Klammern)

      3) Diese Vars sind nur innerhalb des aktuellen <perl>...</perl>-Blocks gültig. D.h.:

      <perl>
      my $x=3;
      </perl>
      

      <perl>
      out $x;
      </perl>
      

      ...gibt nichts aus! Wäre $x ohne "my" davor gesetzt, hätte sie auch im 2. "perl"-Block den Wert 3...

      Als _Parameter_ für subs kannst Du diese Vars aber auf jeden Fall angeben:

      my $x=3;
      &mysub($x);
      

      übergibt 3 an "mysub" - egal was wie wo "mysub" definiert ist...

      Klarer? ;-)


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Dienstag, 30.Juli.2002, 15:07.
    Gültigkeit von "my"-Variablen in Blöcken?

      Hallo,
      vielleicht weiß es jemand, komm selber nicht zum Probieren:
      wie sind die mit my lokal deklarierten Variablen innerhalb der BasePortal-Befehlsblöcke gültig?
      1)
      if ($ga ne "1")
      {
      get "sort=-eig_datum range=0,1", "$db3";
       $bild_breite = 250 if ($bild_breite eq ""); # Vorbelegung für Bildbreite falls nicht vorh.
       my $anz_bild ="<tr><td align=center><table width=95%><tr><td align=center><img src=/files/$bild width=$bild_breite></td></tr></table></td></tr>" if $bild;
      
      ...
      blabla
      }
      
      2)
      while (get_next($db2))
      {
              # Ausgabelänge begrenzen für Feld Meldung #
              my $laenge=80;
              my $Ende = substr($Meldung, $laenge);
              my $Stop = index($Ende,"\ ");
              my $Ende = substr($Ende, 0, $Stop);
              my $Anfang = substr($Meldung, 0, $laenge);
              my $a_intro = "<span class=$tf><h5>$Intro</h5></span>" if $Intro ne "";
      
      ....
      blablabla
      ....
      }
      3)
       get "Id==$dsn", "$db1";  $bild_breite = 250 if ($bild_breite eq ""); # Vorbelegung für Bildbreite falls nicht vorh.  my $anz_bild ="<table><tr><td align=center><table width=95%><tr><td align=center><img src=/files/$bild width=$bild_breite></td></tr></table>" if $bild;  my $a_autor = "Meldung von $Autor" if $Autor;
      ....
      blabla
      und allerhand Variablen belegen
      ....

      Also konkret:
      zu 1) Im if-block mit my dekl. Vars sind wo gültig (und wie wenn dann dadrin elsif's oder weitere if's verschachtelt sind)?
      zu 2) im while-get_next-Blcok mit my dekl. Vars sind wo gültig? (auch wieder was wenn da if's und fornext etc - Blöcke sind)?
      zu 3) Einfach so im Scriptverlauf mit my dekl. Vars sind wo gültig und können die an Subs als Parameter/Werte übergeben werden; auch wenn die Sub in einem mittels include eingefügten <perl></perl>-Block am Anfang des Scriptes steht?
      Danke für Hilfe
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 30.Juli.2002, 16:01.
    Re: Gültigkeit von "my"-Variablen in Blöcken? - genau da ,-)

      Du schreibst es eigentlich schon im Titel: ;-)

      Mit "my" deklarierte/definierte Variablen sind immer innerhalb eines Blockes gültig -> Was ist ein Block? Einfach alles was innerhalb geschweifter Klammern steht. Konkret: Von dem Punkt an dem die Var. definiert wird nach oben gehen bis man auf eine geöffnete geschweifte Klammer trifft und die dazugehörige schliessende geschweifte Klammer suchen - innerhalb dieses Bereichs ist diese Var. sichtbar, d.h. auch in eingeschlossenen weiteren Blöcken. Wird da drin irgendwo eine Subroutine aufgerufen ist diese "my"-Var. innerhalb der Sub aber (natürlich?) nicht sichtbar...

      Für Deine Beispiele heisst das:

      1) $anz_bild ist nur innerhalb des "if"s gültig (innerhalb der geschweiften Klammern)

      2) Alle innerhalb der while-Schleife mit "my" definierten Vars sind nur innerhalb der while-Schleife gültig (innerhalb der geschweiften Klammern)

      3) Diese Vars sind nur innerhalb des aktuellen <perl>...</perl>-Blocks gültig. D.h.:

      <perl>
      my $x=3;
      </perl>
      

      <perl>
      out $x;
      </perl>
      

      ...gibt nichts aus! Wäre $x ohne "my" davor gesetzt, hätte sie auch im 2. "perl"-Block den Wert 3...

      Als _Parameter_ für subs kannst Du diese Vars aber auf jeden Fall angeben:

      my $x=3;
      &mysub($x);
      

      übergibt 3 an "mysub" - egal was wie wo "mysub" definiert ist...

      Klarer? ;-)

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Dienstag, 30.Juli.2002, 18:01.
    Re: Gültigkeit von "my"-Vars- genau da ,-) DANKE!!!!

      Jo, genau das klärt meine Fragen. Insbesondere das mit den weiteren Blöcken in nem Block - da war ich total ins Schwimmen gekommen :-)
      Jetzt ist es vollkommen klar, und ein paar "seltsame Effekte" sind enträtselt.
      Nun wäre da dann nur noch die Frage wie das mit ner "local"-Deklaration aussieht, ist aber momentan nicht wichtig, teste ich selber mal aus, wenn ich wieder etwas Zeit habe.
      Danke nochmal
      Ruben

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 30.Juli.2002, 19:40.
    Re: Gültigkeit von "my"-Vars- genau da ,-) DANKE!!!!

      Weil ich grad dabei bin: ;-)

      mit "local" isses ähnlich wie mit "my", nur wäre eine local-Var in einer aufgerufenen sub sichtbar. Also:

      <perl>
      local $a=1;
      my $b=2;
      &bla();
      

      sub bla
      {
        out "a=$a - b=$b";
      }
      </perl>
      

      gibt

      a=1 - b=

      aus... local hat noch einige andere Unterschiede zu my, z.b. kann man

      local $bla{blubb};

      machen

      my $bla{blubb};
      

      geht dagegen nich... ;-)

     Antworten


     
 Liste der Einträge von 45151 bis 45301:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.08s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!