Schönheitswettbewerb
bearbeitet von pl> > Dann verstehe ich unter dynamischen Scoping wahrscheinlich was Anderes. Auf jeden Fall hat das was `local` macht nichts damit zu tun, daß Informationen erst zur Laufzeit eintreffen.
>
> Statisch und dynamisch sind duale Begriffe, die in der Programmierung immer wieder auftreten. Statisch bedeutet fast immer "zur Compilezeit" oder "zur Entwicklungszeit".
Nein. Statisch hat mit dem Laufzeitverhalten überhaupt nichts zu tun sondern mit dem Verhalten. So verhalten sich Klassenvariablen per se statisch. In PHP ist es sogar üblich, Klassenfunktionen als statische Funktionen zu bezeichnen, eben weil sie sich statisch verhalten.
Das Schlüsselwort `state` (static) kam übrigens mit Perl v5.10 aber statisches Verhalten gibt es auch ohne `state´.
Anwendungsbeispiel:
~~~perl
use strict;
use warnings;
use v5.10;
print cnt(), "\n" for 1..10;
sub cnt{
state $c = 0;
++$c;
}
Das gibt aus
1
2
3
4
5
6
7
8
9
10
~~~
Dynamischer Scope: Mit `local $/ = undef` wird der Wert der bisher in `$/` stand, in einem dynamisch hinzuglinkten Scope gesichert. Der neue Wert, in diesem Fall `undef` gilt nur im aktuellen Block und wenn der verlassen wird, ist wieder der alte Wert gültig. Das steht aber auch alles in der Dokumentation.
MfG