Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision dda4cde1

Von Moritz Bunkus vor fast 13 Jahren hinzugefügt

Diverse XML-Bugs in der Doku gefixt

Unterschiede anzeigen:

doc/html/ch04.html
70 70
          hei?t, alles was einem lieb ist (alle Variablen die einem ans Herz
71 71
          gewachsen sind), sollte man vor einem Aufruf (!) von zum
72 72
          Beispiel <code class="function">IS-&gt;retrieve_customer()</code> in
73
          Sicherheit bringen. </p>
74
          Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man Berechnung in einem
75
          bestimmten Format durchf?hrt (SL/Form.pm Zeile 3552, Stand version 2.7beta), um
76
          dies hinterher wieder auf den richtigen Wert zu setzen:
77
          <pre class="programlisting">
78
            my $saved_numberformat    = $::myconfig{numberformat};
79
            $::myconfig{numberformat} = $numberformat;
80
            # (...) div Berechnungen
81
            $::myconfig{numberformat} = $saved_numberformat;
82
          </pre><p>Das Objekt der Klasse Form hat leider im Moment noch viele
83
          zentrale Funktionen die vom internen Zustand abh?ngen, deshalb
84
          bitte nie einfach zerst?ren oder ?berschreiben (zumindestens nicht kurz
85
          vor einem Release oder in Absprache ?ber bspw. die devel-Liste ;-).
86
          Es geht ziemlich sicher etwas kaputt.</p><p>
87
                  <code class="varname">$::form</code> ist gleichzeitig der Standard Scope
88
          in den <span class="productname">Template::Toolkit</span>&#8482; Templates
89
          au?erhalb der Controller: der Ausdruck <code class="function">[% var
90
          %]</code> greift auf <code class="varname">$::form-&gt;{var}</code> zu.
91
          Unter Controllern ist der Standard Scope anders, da lautet der
92
          Zugriff <code class="function">[% FORM.var %]</code>. In Druckvorlagen sind
93
          normale Variablen ebenfall im <code class="varname">$::form</code> Scope, d.h.
94
          <code class="function">&lt;%var%&gt;</code> zeigt auf
95
          <code class="varname">$::form-&gt;{var}</code>.
96
          Nochmal von der anderen Seite erl?utert, innerhalb von (Web-)Templates sieht
97
          man h?ufiger solche Konstrukte:
98
          </p><pre class="programlisting">
99
            [%- IF business %]
100
            # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an
101
            [%- END %]
102
         </pre><p>
103
        Entweder wird hier dann $::form-&gt;{business} ausgewertet oder aber der Funktion
104
        <code class="function">$form-&gt;parse_html_template</code> wird explizit noch ein zus?tzlicher Hash
105
        ?bergeben, der dann auch in den (Web-)Templates zu Verf?gung steht, bspw. so:
106
          <code class="function">$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</code>
107

  
108
          Innerhalb von Schleifen wird
109
          <code class="varname">$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</code>
110
          bevorzugt, wenn vorhanden.</p>
111
          Zum Beispiel in SL/DO.pm welche ?ber alle Positionen eines Lieferscheins
112
          in Schleife l?uft:
113
          <pre class="programlisting">
114
            for $i (1 .. $form-&gt;{rowcount}) {
115
              (...)
116
              push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
117
              push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
118
              push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
119
         </pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4529"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird sp?testens ben?tigt wenn auf die Datenbank
73
          Sicherheit bringen. </p><p>
74
           Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man Berechnung in einem
75
           bestimmten Format durchf?hrt (SL/Form.pm Zeile 3552, Stand version 2.7beta), um
76
           dies hinterher wieder auf den richtigen Wert zu setzen:
77
          </p><pre class="programlisting">  my $saved_numberformat    = $::myconfig{numberformat};
78
  $::myconfig{numberformat} = $numberformat;
79
  # (...) div Berechnungen
80
  $::myconfig{numberformat} = $saved_numberformat;</pre><p>
81
           Das Objekt der Klasse Form hat leider im Moment noch viele zentrale Funktionen die vom internen Zustand abh?ngen, deshalb bitte
82
           nie einfach zerst?ren oder ?berschreiben (zumindestens nicht kurz vor einem Release oder in Absprache ?ber bspw. die devel-Liste
83
           ;-).  Es geht ziemlich sicher etwas kaputt.
84
          </p><p>
85
           
86
                  <code class="varname">$::form</code> ist gleichzeitig der Standard Scope in den <span class="productname">Template::Toolkit</span>&#8482; Templates
87
           au?erhalb der Controller: der Ausdruck <code class="function">[% var %]</code> greift auf <code class="varname">$::form-&gt;{var}</code> zu.  Unter
88
           Controllern ist der Standard Scope anders, da lautet der Zugriff <code class="function">[% FORM.var %]</code>. In Druckvorlagen sind
89
           normale Variablen ebenfall im <code class="varname">$::form</code> Scope, d.h.  <code class="function">&lt;%var%&gt;</code> zeigt auf
90
           <code class="varname">$::form-&gt;{var}</code>.  Nochmal von der anderen Seite erl?utert, innerhalb von (Web-)Templates sieht man h?ufiger
91
           solche Konstrukte:
92
          </p><pre class="programlisting">[%- IF business %]
93
# (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
94
[%- END %]</pre><p>
95
           Entweder wird hier dann $::form-&gt;{business} ausgewertet oder aber der Funktion <code class="function">$form-&gt;parse_html_template</code>
96
           wird explizit noch ein zus?tzlicher Hash ?bergeben, der dann auch in den (Web-)Templates zu Verf?gung steht, bspw. so:
97
          </p><pre class="programlisting">$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</pre><p>
98
           Innerhalb von Schleifen wird <code class="varname">$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</code> bevorzugt, wenn vorhanden. Ein
99
           Beispiel findet sich in SL/DO.pm, welches ?ber alle Positionen eines Lieferscheins in Schleife l?uft:
100
          </p><pre class="programlisting">for $i (1 .. $form-&gt;{rowcount}) {
101
  # ...
102
  push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
103
  push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
104
  push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
105
  # ...
106
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4531"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird sp?testens ben?tigt wenn auf die Datenbank
120 107
              zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enth?lt die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
121 108
              extern serialisiert werden, weil da auch der Datenbankzugriff
122 109
              f?r diesen user drinsteht.</p></li><li class="listitem"><p>Enth?lt unter anderem Listenbegrenzung vclimit,
123 110
              Datumsformat dateformat und Nummernformat numberformat</p></li><li class="listitem"><p>Enth?lt Datenbankzugriffinformationen</p></li></ul></div><p>
124
                  <code class="varname">%::myconfig</code> ist im Moment der Ersatz f?r
125
          ein Userobjekt. Die meisten Funktionen, die etwas anhand des
126
          aktuellen Users entscheiden m?ssen, befragen
127
          <code class="varname">%::myconfig</code>.
128
          Innerhalb der Anwendungen sind dies ?berwiegend die Daten, die sich
129
          unter Programm-&gt;Einstellungen befinden, bzw. die Informationen ?ber den
130
          Benutzer die ?ber die Administrator-Schnittstelle (admin.pl) eingegeben wurden.
131
        </p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4562"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch f?r Tests und Scripte immer verf?gbar
111
           
112
                  <code class="varname">%::myconfig</code> ist im Moment der Ersatz f?r ein Userobjekt. Die meisten Funktionen, die etwas anhand des
113
           aktuellen Users entscheiden m?ssen, befragen <code class="varname">%::myconfig</code>.  Innerhalb der Anwendungen sind dies ?berwiegend die
114
           Daten, die sich unter <span class="guimenu">Programm</span> -&gt; <span class="guimenuitem">Einstellungen</span> befinden, bzw. die Informationen
115
           ?ber den Benutzer die ?ber die Administrator-Schnittstelle (admin.pl) eingegeben wurden.
116
          </p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4570"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch f?r Tests und Scripte immer verf?gbar
132 117
              sein.</p></li><li class="listitem"><p>Cached intern ?ber Requestgrenzen hinweg benutzte
133 118
              Locales</p></li></ul></div><p>Lokalisierung f?r den aktuellen User. Alle ?bersetzungen,
134
          Zahlen- und Datumsformatierungen laufen ?ber dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4580"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verf?gbar sein, in nahezu allen
119
          Zahlen- und Datumsformatierungen laufen ?ber dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4588"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verf?gbar sein, in nahezu allen
135 120
              Funktionen</p></li></ul></div><p>
136
                  <code class="varname">$::lxdebug</code> stellt Debuggingfunktionen
137
          bereit, wie "<code class="function">enter_sub</code>" und
138
          "<code class="function">leave_sub</code>", mit denen in den alten Modulen ein
139
          brauchbares Tracing gebaut ist, "<code class="function">log_time</code>", mit
140
          der man die Wallclockzeit seit Requeststart loggen kann, sowie
141
          "<code class="function">message</code>" und "<code class="function">dump</code>" mit
142
          denen man flott Informationen ins Log (tmp/lx-office-debug.log) packen kann.</p>
143
          Beispielsweise so:
144
          <pre class="programlisting">
145
            $main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
146
            $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});
147

  
148
          </pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4616"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
121
           
122
                  <code class="varname">$::lxdebug</code> stellt Debuggingfunktionen bereit, wie "<code class="function">enter_sub</code>" und
123
           "<code class="function">leave_sub</code>", mit denen in den alten Modulen ein brauchbares Tracing gebaut ist,
124
           "<code class="function">log_time</code>", mit der man die Wallclockzeit seit Requeststart loggen kann, sowie
125
           "<code class="function">message</code>" und "<code class="function">dump</code>" mit denen man flott Informationen ins Log
126
           (tmp/lx-office-debug.log) packen kann.
127
          </p><p>
128
           Beispielsweise so:
129
          </p><pre class="programlisting">$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
130
$main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4625"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
149 131
                  <code class="varname">$::auth</code> stellt Funktionen bereit um die
150 132
          Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
151 133
          vom aktuellen User abh?ngen wird das Objekt aus
152 134
          Geschwindigkeitsgr?nden nur einmal angelegt und dann nach jedem
153
          Request kurz resettet.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4637"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
135
          Request kurz resettet.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4646"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
154 136
              "<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repr?sentation der
155 137
              <code class="filename">config/lx_office.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen
156 138
          und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass das
......
159 141
file = /tmp/lx-office-debug.log</pre><p>ist der Key <code class="varname">file</code> im Programm als
160 142
          <code class="varname">$::lx_office_conf-&gt;{debug}{file}</code>
161 143
          erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="../../../../system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment ?ber
162
            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4673"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
144
            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4682"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
163 145
              "<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>,
164 146
          speichert aber Daten die von der Instanz abh?ngig sind. Eine Instanz
165 147
          ist hier eine Mandantendatenbank.
166 148
          Beispielsweise ?berpr?ft
167 149
          </p><pre class="programlisting">$::instance_conf-&gt;get_inventory_system eq 'perpetual'</pre><p>
168
          ob die ber?chtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4694"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
150
          ob die ber?chtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4703"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
169 151
              "<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enth?lt Informationen ?ber die technische Verbindung zum
170 152
              Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt
171 153
          global gespeichert wird. Wird vermutlich irgendwann in einem anderen
172
          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4712"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl sp?ter Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
154
          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4721"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl sp?ter Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
173 155
                  <code class="varname">$::request</code> ist ein generischer Platz um
174 156
          Daten "f?r den aktuellen Request" abzulegen. Sollte nicht f?r action
175 157
          at a distance benutzt werden, sondern um lokales memoizing zu
......
179 161
          Differentialkriterien sind:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Kommt es vom User, und soll unver?ndert wieder an den User? Dann <code class="varname">$::form</code>, steht da eh schon</p></li><li class="listitem"><p>Sind es Daten aus der Datenbank, die nur bis zum Ende des Requests gebraucht werden? Dann
180 162
              <code class="varname">$::request</code>
181 163
                     </p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff ?ber
182
              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4754"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
183
        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4759"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war n?tig, weil cookie Methoden nicht als
164
              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4763"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
165
        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4768"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war n?tig, weil cookie Methoden nicht als
184 166
              Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im
185 167
              Klassennamespace gehalten wird und ?ber Requestgrenzen
186 168
              leaked</p></li><li class="listitem"><p>liegt jetzt unter
187 169
              <code class="varname">$::request-&gt;{cgi}</code>
188
                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4775"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war n?tig, weil einige Funktionen in Schleifen zum Teil
170
                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4784"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war n?tig, weil einige Funktionen in Schleifen zum Teil
189 171
              ein paar hundert mal pro Request eine Liste der Einheiten
190 172
              brauchen, und de als Parameter durch einen Riesenstack von
191 173
              Funktionen geschleift werden m?ssten.</p></li><li class="listitem"><p>Liegt jetzt unter
192 174
              <code class="varname">$::request-&gt;{cache}{all_units}</code>
193 175
                     </p></li><li class="listitem"><p>Wird nur in
194 176
              <code class="function">AM-&gt;retrieve_all_units()</code> gesetzt oder
195
              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4794"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
177
              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4803"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
196 178
              abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der
197 179
              m?glichen Rekursioenen darstellt, und da nie welche
198 180
              auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Zur?ck</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>

Auch abrufbar als: Unified diff