File: EmbperlD.pod

package info (click to toggle)
libhtml-embperl-perl 1.3.6-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,596 kB
  • ctags: 1,190
  • sloc: ansic: 8,985; perl: 4,584; makefile: 83
file content (2755 lines) | stat: -rw-r--r-- 89,671 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
=pod

=head1 NAME

HTML::Embperl_ - Erstellen dynamischer Websites mit Perl

=head1 SYNOPSIS

=head1 DESCRIPTION

I<Embperl> ist ein Perlmodul welches es erlaubt beliebigen Perlcode
in HTML Dokumente einzuf�gen.

Wenn Sie mehr als eine einzelne Webseite erstellen, sollten Sie auch
einen Blick auf L<"perldoc EmbperlObject"|"EmbperlObject.pod">  werfen,
welches es erlaubt Websites aus wiederverwendbaren Objketen zusammenzusetzen.
Zus�tzlich erlaubt es L<"perldoc HTML::Embperl::Mail"|"Mail.pod"> die
resultierenden Seiten per EMail zu verschicken.

=head1 Aufrufen/Konfigurieren von Embperl

=head2 mod_perl Konfiguration

Um I<HTML::Embperl> als content handler unter I<mod_perl>
laufen zu lassen, sind folgende Zeilen in der Apache Konfigurationsdatei F<httpd.conf> n�tig:


Beipiel f�r Apache B<httpd.conf>:


    SetEnv EMBPERL_DEBUG 2285

    <Location /embperl/x>
        SetHandler  perl-script
        PerlHandler HTML::Embperl
        Options     ExecCGI
    </Location>


Diese Konfiguration bewirkt, dass I<mod_perl> I<Embperl> f�r
alle Dateien, die im Unterverzeichnis, das mittels der URI <l>/embperl/x</l>
angesprochen wird, liegen, als content handler aufruft. I<Embperl>
kann dann die Datei entsprechend bearbeiten und das Ergebnis zum Browser
schicken.


Eine andere M�glichkeit ist, alle Dateien mit einer bestimmten Endung
von Embperl bearbeiten zu lassen. Eine Konfiguration daf�r w�rde wie folgt
aussehen:


    SetEnv EMBPERL_DEBUG 2285

    <Files *.epl>
        SetHandler  perl-script
        PerlHandler HTML::Embperl
        Options     ExecCGI
    </files>

    AddType text/html .epl

B<HINWEIS>: Wenn I<mod_perl> mit C<USE_DSO> �bersetzt ist, darf I<Embperl> B<nicht>
beim Starten des Server geladen werden!

=head2 Andere Arten Embperl zu nutzen


Embperl kann ebenso von der Befehlszeile aus aufgerufen werden oder
als normales CGI Skript ausgef�hrt werden. Weiterhin k�nnen
andere Perlprogramme oder -module es direkt aufrufen.


Der Aufruf von der Befehlszeile sieht folgenderma�en aus (erste Zeile Unix, zweite Zeile Windows): 



C<embpexec.pl [-o outputfile] [-l logfile] [-d debugflags] htmlfile [query_string]>

C<embpexec.bat [-o outputfile] [-l logfile] [-d debugflags] htmlfile [query_string]>


=over 4

=item B<htmlfile>

Datei welche von Embperl bearbeitet werden soll.

=item B<query_string>

Optional. Hat die selbe Bedeutung wie die Umgebungsvariable
B<QUERY_STRING> eines CGI Skripts.  B<QUERY_STRING> beinhaltet alles
nach dem ersten "?" in der URL. B<query_string> sollte URL kodiert sein.
Default ist kein query_string.

=item B<-o outputfile>

Optional. Gibt den Dateinamen an, in den das Ergebnis geschrieben wird.
Default ist die Standardausgabe.

=item B<-l logfile>

Optional. Name der Logdatei. Default ist C</tmp/embperl.log>.

=item B<-d debugflags>

Optional. Gibt an, welche Debuginformationen  in die Logdatei
geschrieben werden. (siehe L<"EMBPERL_DEBUG"> f�r m�gliche Werte)

=back

Um I<Embperl> als B<CGI Skript> zu nutzen, m�ssen Sie die Datei
C<embpcgi.pl> (bzw. C<embpcgi.bat> unter Windows) in Ihr CGI
Verzeichnis kopieren (oft C</cgi-bin>). Zur Benutzung mit FastCGI
zusammen, verwenden Sie die Datei embpfastcgi.pl.
Zum Aufrufen verwenden Sie die URL

 http://www.domain.de/cgi-bin/embpcgi.pl/uri/ihres/embperl/dokuments

Die extra Pfadinformationen die C<embpcgi.pl> �bergeben werden, geben
dabei den Ort des Embperl Dokuments an.

Unter Apache kann C<embpcgi.pl> auch als Handler definiert werden:

    <Directory /pfad/zu/ihren/embperl/dokumenten>
    Action text/html /cgi-bin/embperl/embpcgi.pl
    </Directory>

B<HINWEIS 1> Die Datei embpexec.pl darf aus Sicherheitsgr�nden nicht mehr als
CGI Skript genutzt werden!

B<HINWEIS 2>: Um die Sicherheit von CGI Skripten sicher zustellen, empfiehlt es sich
mittels L<EMBPERL_ALLOW> den Zugriff zu beschr�nken.


=head2 Embperl aus Embperl Dokumenten oder anderen Perl Programmen/Modulen aufrufen

Die Funktion C<Execute> kann genutzt werden, um I<Embperl> aus anderen
Perlmodulen oder -programmen aufzurufen. Ebenso ist es m�glich andere
Dokumente (z.B. Kopf- oder Fu�zeilen) in Embperlseiten einzuf�gen.

Die Kurzform m�ssen lediglich Dateinamen und ggf. Parameter f�r das
aufzurufende Dokument als Argumente angegeben werden:

  Execute ($filename, @params) ;

Die Langform erwartet eine Referenz auf einen Hash als Argument:

  Execute (\%params) ;

Die Kurzform entspricht folgendem Aufruf in der Langform:

  Execute ({inputfile => $filename,
            param     => \@params}) ;

Parameter f�r die Langform sind:

=over 4

=item B<inputfile>

Mittels C<inputfile> wird die Datei angegeben, die
von I<Embperl> bearbeitet werden soll. Ist der Parameter C<input>
ebenso vorhanden, sollte C<inputfile> einen eindeutigen Namen
spezifizieren. Jedesmal wenn I<Embperl> den selben Namen sieht, geht es davon
aus, da� die Quelle die selbe ist und verwendet den selben Packagenamen,
sowie compiliert die Perlteile nur wenn C<mtime> sich �ndert oder
undefiniert ist.

=item B<sub>

Ruft die durch diesen Parameter angegebene Funktion auf (siehe auch [$ B<"sub"> $]).
Momentan mu�
die Funktion entweder in der selben Embperldatei definiert sein oder 
die Embperldatei mu� vorher importiert worden sein.

=item B<input>

Referenz auf einen Skalar, welcher den Quellentext enth�lt. B<inputfile>
sollte ebenso angegeben werden, um die Quelle zu benennen. Der Name
kann dabei beliebiger Text sein.

=item B<mtime>

Zeitpunkt der letzten �nderung des Quellentextes. Der Quellentext
wird nur dann neu �bersetzt, wenn sich B<mtime> �ndert oder wenn
B<mtime> C<undef> ist.


=item B<outputfile>

Datei, in die die Ausgabe geschrieben wird. Ist keine Datei angegeben,
wird die Standardausgabe benutzt.

=item B<output>

Referenz auf einen Skalar, in welchen die Ausgabe geschrieben werden soll.

=item B<import>

Ein Wert von Null veranlasst I<Embperl> die Seite nicht auszuf�hren, sondern alle
darin enthaltenen Funktionen zu definieren. Dies ist n�tig, um sie mittels des
B<sub> Parameters der Execute Funktion aufrufen zu k�nnen oder als Vorbereitung
f�r einen sp�teren Import.

Ein Wert von Eins veranlasst I<Embperl> die Seite nicht auszuf�hren, sondern alle
darin enthaltenen Funktionen zu definieren B<und> diese in das aktuelle Package zu importieren.

Siehe auch C<[$ sub $]> Metacommand.


=item B<cleanup>

Dieser Wert gibt an, ob and wann das "Cleanup" des Packages ausgef�hrt werden soll.
(Siehe auch L<"Variablen G�ltigkeitsbereich und Cleanup">)

=over 4

=item B<cleanup = -1>

Es wird kein Cleanup ausgef�hrt.

=item B<cleanup = 0> oder nicht spezifiziert

Unter I<mod_perl> wird das Cleanup erst ausgef�hrt, B<nachdem> die Verbindung zum
Client beendet wurde, auch wenn C<Execute> mehrfach w�hrend eines
Request aufgerufen wird.

In allen anderen F�llen wird das Cleanup sofort ausgef�hrt.

=item B<cleanup = 1>

Cleanup wird sofort ausgef�hrt.

=back

=item B<param>

Eine Referenz auf ein Array, um dem aufgerufenen Dokument Parameter zu �bergeben.


 Beispiel:

    HTML::Embperl::Execute(..., param => [1, 2, 3]) ;
    HTML::Embperl::Execute(..., param => \@parameters) ;

�ber das Array C<@param> kann die aufgerufene Seite auf die Parameter zugreifen.
Siehe F<eg/x/Excute.pl> aus der Embperl Distribution f�r ein detailliertes Beispiel.

=item B<ffld and fdat>

Kann benutzt werden, um die beiden Embperlvariablen L<@ffld> und L<%fdat> zu setzen.

=item B<firstline>

Gibt die erste Zeilennummer der Quellendatei an (Default: 1)

=item B<options>

Wie L<"EMBPERL_OPTIONS"> (siehe unten), au�er f�r Cleanup.

B<HINWEIS:> B<optDisableFormData> sollte gesetzt werden, wenn die Formulardaten
eines B<POST> Request bereits von der Standardeingabe eingelesen wurden, ansonsten
versucht C<Execute> die Daten ein zweites Mal einzulesen, was dazu f�hrt, das der Request
h�ngt.

=item B<debug>

Wie L<"EMBPERL_DEBUG"> (siehe unten).

=item B<escmode>

Wie L<"EMBPERL_ESCMODE"> (siehe unten).

=item B<package>

Wie L<"EMBPERL_PACKAGE"> (siehe unten).

=item B<virtlog>

Wie L<"EMBPERL_VIRTLOG"> (siehe unten). Wenn B<virtlog> gleich B<uri> ist, wird
die Embperl Logdatei gesendet.

=item B<allow (ab 1.2b10)>

Wie L<"EMBPERL_ALLOW"|"EMBPERL_ALLOW (ab 1.2b10)"> (siehe unten)

=item B<path (ab 1.3b1)>

Wie L<"EMBPERL_PATH"|"EMBPERL_PATH (ab 1.3b6)"> (siehe unten)

=item B<uri>

Die URI des Request. Wird nur f�r Virtlog Feature ben�tigt.

=item B<compartment>

Wie L<"EMBPERL_COMPARTMENT"> (siehe unten).

=item B<input_func>

Wie L<"EMBPERL_INPUT_FUNC"> (siehe unten).
Zus�tzlich ist es m�glich eine Codereferenz anzugeben, die entsprechende
Funktion wird dann als Eingabefunktion aufgerufen. Ebenso ist die Angabe
einer Arrayreferenz m�glich, wobei das erste Element dann die Codereferenz
enth�lt und alle weiteren Elemente als Parameter der Funktion �bergeben werden.

=item B<output_func>

Wie L<"EMBPERL_OUTPUT_FUNC"> (siehe unten).
Zus�tzlich ist es m�glich eine Codereferenz anzugeben, die entsprechende
Funktion wird dann als Ausgabefunktion aufgerufen. Ebenso ist die Angabe
einer Arrayreferenz m�glich, wobei das erste Element dann die Codereferenz
enth�lt und alle weiteren Elemente als Parameter der Funktion �bergeben werden.

=item B<cookie_name>

Wie L<"EMBPERL_COOKIE_NAME"> (siehe unten).

=item B<cookie_path>

Wie L<"EMBPERL_COOKIE_PATH"> (siehe unten).

=item B<cookie_domain>

Wie L<"EMBPERL_COOKIE_DOMAIN"> (siehe unten).

=item B<cookie_expires>

Wie L<"EMBPERL_COOKIE_EXPIRES"> (siehe unten).

=item B<errors>

Erwartet eine Referenz auf ein Array. Nach der R�ckkehr der Funktion enth�lt das Array
alle Fehlermeldungen der aufgerufenen Seite, soweit welche aufgetreten sind.

=item B<object> (ab 1.3.1b1)

Erwartet einen Dateinamen und liefert eine Hashreferenz zur�ck, die in das 
Package der Datei "geblessed" ist, d.h. die Hashreferenze kann dazu genutzt
werden, um Funktionen die in der Datei definiert sind, also Methoden
aufzurufen. Zus�tzlich kann durch den C<isa> Parameter (siehe unten) eine
Vererbungshierachie zwischen Embperlseiten aufgebaut werden. Au�erdem ist
es m�glich in dem Hash Objektdaten zu speichern.

  Beispiel:

  [# Die Datei eposubs.htm definiert zwei Funktionen: txt1 und txt2 #]
  [# Als erstes erstellen wir ein neues Objekt #]
  [- $subs = Execute ({'object' => 'eposubs.htm'}) -]

  [# Nun kann man Methoden aufrufen #]
  txt1: [+ $subs -> txt1 +] <br>

  txt2: [+ $subs -> txt2 +] <br>


=item B<isa>  (ab 1.3.1b1)

Erwarten den Namen einer Datei und schiebt den Packagename der Datei
auf das @ISA Array der aktuellen Seite. Dadurch wird es m�glich eine
Vererbung zwischen Embperlseiten aufzubauen. Dies ist auch innerhalb
von I<EmbperlObject> hilfreich.

  Beispiel:

    [! Execute ({'isa' => '../eposubs.htm'}) !]

=item B<syntax>  (ab 1.3.2)

In der Version 1.3.x wird lediglich der Wert 'Text' akzetiert, dieser
f�hrt dazu, dass das Verhalten von Embperl 2.0 emuliert wird und 
der Text lediglich durchgereicht wird und keine Verarbeitung
stattfindet.

=back


=head2 Hilfsfunktionen f�r Execute

=over 4

=item B<HTML::Embperl::Init ($Logfile, $DebugDefault)>

Diese Funktion dient dazu, die Logdatei sowie
die Debugflags, die f�r die folgenden Aufrufe von C<Execute> genutzt werden,
zu setzen. Es kann immer nur eine Logdatei existieren, der Pfad kann jedoch jederzeit
ge�ndert werden.

=item B<HTML::Embperl::ScanEnvironment (\%params)>

Durchsucht alle Umgebungsvariablen (B<%ENV>) und setzt B<%params> f�r die Benutzung von C<Execute>. Alle
Embperl Konfigurationsvariablen, au�er EMBPERL_LOG, werden erkannt.

=back


=head2 Beispiele f�r Execute:

 # Quellentext steht unter /pfad/zu/seite.html und
 # das Ergebnis wird in /pfad/zu/ausgabe.html geschrieben

 HTML::Embperl::Execute ({ inputfile  => '/pfad/zu/seite.html',
                           outputfile => '/pfad/zu/ausgabe.html'}) ;


 # Quellentext steht in einem Skalar und das Ergebnis wird auf der
 # Standardausgabe ausgegeben
 # Vergessen Sie nicht, mtime zu �ndern wenn $src sich �ndert

 $src = '<html><head><title>Seite [+ $no +]</title></head>' ;

 HTML::Embperl::Execute ({ inputfile  => 'irgendein name',
                           input      => \$src,
                           mtime      => 1 }) ;

 # Quellentext steht in einem Skalar und das Ergebnis wird in
 # einen zweiten Skalar geschrieben
 
 my $src = '<html><head><title>Seite [+ $no +]</title></head>' ;
 my $out ;

 HTML::Embperl::Execute ({ inputfile  => 'anderer name',
                           input      => \$src,
                           mtime      => 1,
                           output     => \$out }) ;

 print $out ;


 # Einf�gen eines gemeinsammen Kopfes in eine Embperlseite
 # der sich in /pfad/zu/kopf.html befindet
 
 [- Execute ('/pfad/zu/kopf.html') -]
 




=head1 Runtime Konfiguration

Die Runtimekonfiguration wird mittels Umgebungsvariablen eingestellt,
entweder auf der Befehlszeile oder in der Webserverkonfigurationsdatei.
Die meisten HTTP Server verstehen

SetEnv <var> <wert>

Wenn Sie I<Apache> und I<mod_perl> nutzen, funktioniert auch

PerlSetEnv <var> <wert>

Der Vorteil von C<PerlSetEnv> gegen�ber C<SetEnv> ist, da� unterschiedliche Werte f�r
verschiedene Verzeichnisse oder virtuelle Hosts gesetzt werden kann.


=head2 EMBPERL_FILESMATCH

Wenn vorhanden, werden von I<Embperl> nur Dateien bearbeitet, die der angegebenen
B<Perl regular expression> entsprechen. Alle anderen Dateien werden an den Standard
Apachehandler weitergereicht. Dies ist n�tztlich, um Embperl Dokumente und Nicht-Embperl
Dokumente (z.B. Gifs) in einem Verzeichnis abzulegen.
EMBPERL_FILESMATCH funktioniert nur unter I<mod_perl>. Beispiel:
 
 # Nur Dateien mit der Endung .htm werden von Embperl bearbeitet
 PerlSetEnv EMBPERL_FILESMATCH \.htm$

=head2 EMBPERL_ALLOW (ab 1.2b10)

Wenn vorhanden, werden von I<Embperl> nur Dateien bearbeitet, die der angegebenen
B<Perl regular expression> entsprechen. Die Bearbeitung anderer Dateien wird mit 
dem Fehlercode FORBIDDEN verweigert. Dies ist vorallem in CGI Mode n�tzlich, um
die Serversicherheit zu erh�hen.

=head2 EMBPERL_PATH (ab 1.3b6)

Hier kann eine durch Semikolon (unter Unix auch Doppelpunkte) getrennte Liste von
Verzeichnissen angegeben werden,
die I<Embperl> durchsucht, wenn eine Datei verabeitet werden soll und
der Dateiname keine absolute Pfadangabe enth�lt und nicht mit
C<./> (bzw. C<.\> unter Windows) anf�ngt. Verzeichnisse m�ssen mit einem
Slash (C</> bzw. C<\>) abgeschlossen werden, andernfalls wird der Teil als
Dateiprefix interpretiert. Eine spezielle Behandlung findet statt, wenn
der Dateiname mit C<../> (bzw. C<..\>) beginnt. Dann wird die selbe Anzahl
Elemente wie C<../> im Dateinamen sind im Pfad �bersprungen.

=head2 EMBPERL_COMPARTMENT

Gibt dem Namen des Compartments f�r die Opcodemaske an.
(Siehe L<"(Sichere-)Namensr�ume und Opcode Restriktionen"> f�r Details.)


=head2 EMBPERL_ESCMODE

Gibt den Anfangswert f�r L<"$escmode"> an (siehe unten).


=head2 EMBPERL_LOG

Pfad f�r die Embperl Logdatei. Diese enth�lt Informationen dar�ber, wie
Embperl den eingebetteten Perlcode ausf�hrt. Wieviele Informationen geschrieben
werden h�ngt von der Einstellung der Debugflags ab  (siehe L<"EMBPERL_DEBUG">).
Default ist F</tmp/embperl.log>.

B<HINWEIS:> Unter I<mod_perl> mu� C<EMBPERL_LOG> mittels C<PerlSetEnv> gesetzt werden,
damit es schon bei Serverstart wahrgenommen wird.


=head2 EMBPERL_PACKAGE

Name des Packages in dem der Code ausgef�hrt wird. Wenn kein Package
angegeben ist, erzeugt Embperl f�r jede Datei einen eindeutigen Packagenamen.
Dies verhindert, dass globale Variablen zweier Skripts miteinander in
Konflikt geraten. 

=head2 EMBPERL_VIRTLOG

Gibt eine URI an, unter der die Embperl Logdatei mittels des Browsers abgerufen
werden kann. Dieses Feature ist gesperrt, wenn C<EMBPERL_VIRTLOG> nicht gesetzt ist.
Siehe auch L<"EMBPERL_DEBUG"> und L<"dbgLogLink"> f�r ein Beispiel, wie dies in
Webserverkonfiguration eingestellt werden kann.


=head2 EMBPERL_OPTIONS

Diese Bitmaske gibt diverse Optionen f�r die Ausf�hrung von Embperl an.
Damit k�nnen bestimmte Features von I<Embperl> gesperrt oder freigegeben
sowie das Verhalten von Embperl beeinflu� werden. Um mehrere Optionen anzugeben
sind die Werte zu addieren.

=over 4

=item optDisableVarCleanup = 1

Cleanup wird nicht nach jedem Request ausgef�hrt.

=item optDisableEmbperlErrorPage = 2

F�hrt dazu, dass I<Embperl> im Fehlerfall nicht seine eigene Fehlerseite
anzeigt, sondern so viel wie m�glich der Seite. Fehler werden
lediglich in die Logdatei geschrieben.
Ohne diese Option sendet I<Embperl> seine eigne Fehlerseite, die
alle Fehler, die aufgetreten sind, anzeigt. Wenn L<"dbgLogLink">
gesetzt ist,werden alle Fehler als Links auf die Logdatei dargestellt.
Diese Option hat keinen Effekt, wenn L<"optReturnError"> gesetzt ist.

=item optReturnError = 262144

Wenn diese Option gesetzt ist, sendet Embperl keine Fehlerseite, sondern
liefert den Fehlercode an Apache oder das aufrufende Programm zur�ck.
Unter I<Apache> erm�glicht dies die C<ErrorDocument> Anweisung zu benutzen,
um eine eigene Fehlerseite anzuzeigen. Innerhalb des ErrorDokuments ist es
m�glich die Embperlfehlermeldungen mittels

  $errors = $req_rec -> prev -> pnotes('EMBPERL_ERRORS') ;

zu ermitteln, wobei C<$errors> eine Arrayreferenz ist. (1.3b5+)

=item optShowBacktrace = 0x8000000

Wenn gesetzt wird bei der Ausgabe von Fehlermeldungen zus�tzlich eine Liste
aller Dateien ausgegeben diese die aktulle Sourcedatei aufgerufen haben.

=item optSafeNamespace = 4

Veranlasst I<Embperl> den Code in einem sicheren Namensraum auszuf�hren.
Dadurch ist es nicht mehr m�glich auf Daten au�erhalb des Packages zuzugreifen.
(Siehe L<"(Sichere-)Namensr�ume und Opcode Restriktionen"> f�r Details.)

=item optOpcodeMask = 8

Veranlasst I<Embperl> eine Operator Maske anzuwenden. Dadurch ist es m�glich,
bestimmte, unsichere, Opcodes zu sperren.
(Siehe L<"(Sichere-)Namensr�ume und Opcode Restriktionen"> f�r Details.)


=item optRawInput = 16

Veranlasst I<Embperl> den Quellentext unangetastet zu lassen, lediglich
Return-Zeichen werden entfernt, da Perl 5.004 dies nicht akzeptiert.
Diese Option sollte aufjeden Fall gesetzt werden, wenn Sie Ihren Quellentext
mit einem Ascii Editor schreiben.

Wenn Sie jedoch einen (WYSIWYG) HTML-Editor benutzen, welcher unerw�nschte HTML Tags
in den Perlcode einf�gt und spezielle Zeichen HTML-Kodiert (z.B. '<' als &lt;), dann
sollten Sie diese Option B<nicht> setzen.
I<Embperl> konvertiert dann das HTML automatisch in den Perlcode zur�ck, wie Sie ihn
im Editor eingegeben haben.

=item optEarlyHttpHeader = 64

Normalerweise werden die HTTP Header von I<Embperl> gesendet, nachdem der Request
bearbeitet wurde. Dies erm�glicht, w�hrend der Bearbeitung des Dokuments beliebige
Header zu setzen und Embperl kann den C<Content-Length> Header berechnen.
Au�erdem erzeugt Embperl eine Fehlerseite, statt des Dokuments, falls Fehler
auftreten. 
Um dies zu erreichen, wird die Ausgabe zwischengespeichert bis der Request abgearbeitet wurde,
dann werden zuerst die HTTP Header und danach das Dokument gesendet.
Dieses Flag f�hrt dazu, das die Header sofort, vor der Ausf�hrung des Dokuments, gesendet
werden und die Ausgabe nicht gepuffert ist.

=item optDisableChdir = 128

Ohne diese Option setzt I<Embperl> das aktuelle Verzeichnis entsprechend dem
Verzeichnis, in dem das ausgef�hrte Skript steht. Dies erm�glicht es innerhalb
der Embperlseite relative Pfadnamen zu benutzen. Da der Verzeichniswechsel,
u.U. einige Zeit in Anspruch nimmt, kann er mit dieser Option verhindert werden.

=item optDisableFormData = 256

Diese Option verhindert das Setzen von %fdat und @Z<>ffld. I<Embperl> ignoriert
die gesendeten Formulardaten vollst�ndig.

=item optDisableHtmlScan = 512

Wenn gesetzt, verhindet diese Option das Bearbeiten B<aller> HTML Tags vollst�ndig.
I<Embperl> sucht dann nur noch nach <[+/-/!/$ ... $/!/-/+]> Bl�cken. Dies schaltet
dynamische Tabellen, Formularbearbeitung usw. ab.

=item optDisableInputScan = 1024

Verhindert die Bearbeitung aller Eingabe Tags. (<INPUT><TEXTAREA><OPTION>)

=item optDisableTableScan = 2048

Verhindert die Bearbeitung aller Tabellen Tags. (<TABLE><TH><TR><TD><MENU><OL><UL>)

=item optDisableSelectScan = 8388608 (0x800000) (ab 1.3b7)

Verhindert die Bearbeitung aller SELECT Tags. (<SELECT>)

=item optDisableMetaScan = 4096

Verhindert die Bearbeitung aller Meta Tags. (<META HTTP-EQUIV>)

=item optAllFormData = 8192

Diese Option veranlasst I<Embperl> all Formularfelder in L<%fdat> und L<@ffld> einzuf�gen,
auch wenn sie leer sind. Leere Formularfelder werden als leere Zeichenkette eingef�gt.
Ohne diese Option werden leere Formularfelder nicht zu %fdat und @Z<>ffld hinzuf�gt.


=item optRedirectStdout = 16384

Leitet die Standardausgabe vor jedem Request auf dem Embperlausgabestrom um und setzt sie
anschlie�end zur�ck. Wenn die Option gesetzt ist kann das normale Perl B<print> benutzt 
werden, um Ausgaben vorzunehmen. Ansonsten sind Ausgaben nur mittels eines [+ ... +] Blocks
oder durch Ausgeben auf die Dateihandle B<OUT> m�glich.


=item optUndefToEmptyValue = 32768

Normalerweise, wenn Embperl f�r ein Eingabefeld keinen Wert in B<%fdat> findet, l��t
es das HTML Tag unver�ndert. Mit dieser Option behandelt Embperl das Feld so, als
w�re eine leere Zeichenkette in %fdat f�r dieses Feld, d.h. wenn kein C<VALUE>
Attribut vorhanden ist f�gt Embperl ein C<VALUE=""> ein.

=item optNoHiddenEmptyValue = 65536 (ab 1.2b2)

Mit dieser Option erzeugt I<Embperl> beim Hidden Metacommand keine Hidden-Felder
f�r leere Zeichenketten.

=item optAllowZeroFilesize = 131072 (ab 1.2b2)

Dokumente der Dateil�nge Null f�hren normalerweise zu einem Fehler "NOT_FOUND (404)".
Mit dieser Option liefert Embperl ein leeres Dokument zur�ck.

=item optKeepSrcInMemory =  524288  (ab 1.2b5) 

Veranlasst I<Embperl> den Quellencode des Dokuments im Speicher zuhalten.
(Der compilierte Perlcode wird immer im Speicher gehalten, unabh�nig von diesem
Flag). 

=item optKeepSpaces = 1048576 (ab 1.2b5) 	       = 0x100000,

Verhindert das Entfernen von Leerzeilen und Zwischenr�umen. Dies ist
sinnvoll f�r Nicht-HTML-Dokumente.

=item optOpenLogEarly =  2097152 (ab 1.2b5) 

Diese Option veranla�t I<Embperl> die Logdatei zu �ffnen, sobald es geladen wird.
Dies kann genutzt werden, wenn I<Embperl> unter I<mod_perl> mittels C<PerlModule>
geladen wird, um die Logdatei als B<root>, statt des nicht-privilegierter
Benutzers, zu �ffnen.

=item optUncloseWarn =   4194304 (ab 1.2b6) 

Verhindert das I<Embperl> eine Warnung �ber nicht abgeschlossene C<if>, C<while>, C<table>, etc.
am Dateiende ausgibt.


=back



=head2 EMBPERL_DEBUG

Diese Bitmaske gibt an, welche Informationen in die Logdatei geschrieben werden.
Um mehrere Optionen anzugeben
sind die Werte zu addieren.

=over 4

=item dbgStd = 1

Minimale Informationen.

=item dbgMem = 2

Speicherverwaltung.

=item dbgEval = 4

Zeigt den Code und das Resultat beim Ausf�hren von Perl.

=item dbgCmd = 8

Schreibt alle Metacommands und HTML Tags, die ausgef�hrt werden, in die Logdatei.

=item dbgEnv = 16,

Listet alle Umgebungsvariablen.

=item dbgForm = 32

Listet die an das Dokument gesandten Formulardaten.

=item dbgTab = 64

Zeigt die Bearbeitung von dynamischen Tabellen.

=item dbgInput = 128

Zeigt die Bearbeitung von Eingabefeldern.

=item dbgFlushOutput = 256

F�hrt ein C<flush> nach jeder Ausgabe aus.
Dies dient lediglich zum Debuggen von Abst�rzen und f�hrt normalerweise
zu einer deutlichen Verlangsamung der Ausgabe.

=item dbgFlushLog = 512

F�hrt ein C<flush> nach jedem Schreiben in die Logdatei aus.
Dies dient lediglich zum Debuggen von Abst�rzen und f�hrt normalerweise
zu einer deutlichen Verlangsamung der Verarbeitung.

=item dbgAllCmds  = 1024

Schreibt alle Metacommands und HTML Tags in die Logdatei, unabh�nig davon
ob sie ausgef�hrt werden oder nicht. Ein '+' kennzeichnet dabei, dass Embperl
diesen Befehl ausf�hrt. 

=item dbgSource = 2048

Schreibt jeweils den n�chsten Teil des Quellencodes in die Logdatei, der
ausgef�hrt wird. (Dadurch kann die Logdatei recht umfangreich werden)

=item dbgFunc = 4096

Diese Option ist nur verf�gbar, wenn I<Embperl> mit C<-DEPDEBUGALL>
�bersetzt wurde. Wenn gesetzt, werden alle Embperl internen Funktionsaufrufe
in die Logdatei geschrieben. Dient dem Debuggen von I<Embperl> selbst.

=item dbgLogLink = 8192

F�gt oben auf jeder Seite einen Link ein, der dazu benutzt werden kann,
die Logdatei f�r diesen Request anzuzeigen. Siehe auch L<"EMBPERL_VIRTLOG">.

 Beispiel:

    SetEnv EMBPERL_DEBUG 10477
    SetEnv EMBPERL_VIRTLOG /embperl/log

    <Location /embperl/log>
    SetHandler perl-script
    PerlHandler HTML::Embperl
    Options ExecCGI
    </Location>

=item dbgDefEval = 16384

Erzeugt jedesmal einen Eintrag in der Logdatei, wenn neuer Perlcode �bersetzt wird.


=item dbgHeadersIn = 262144

Schreibt alle  HTTP Header in die Logdatei.

=item dbgShowCleanup = 524288

Gibt jede Variable, sowie deren Wert, die am Ende des Request "aufger�umt"
wird, aus.

=item dbgProfile = 1048576 (ab 1.2b4) 

Wenn gesetzt, wird f�r jede Quellencodezeile die Zeit, seit dem Start des
Requests, ausgegeben. (B<dbgSource> mu� ebenfalls gesetzt sein)

=item dbgSession = 2097152 (ab 1.2b4) 

Empfangen und Senden von Session cookies wird geloggt.

=item dbgImport =  4194304 (ab 1.2b5) 

Zeigt, wie Funktionen in andere Packages importiert werden.


=back

Ein guter Wert f�r den Anfang ist C<2285> oder C<10477>. Letzteres erm�glicht das
Anzeigen der Logdatei via Browser (C<EMBPERL_VIRTLOG> mu� ebenfalls gesetzt sein.)


=head2 EMBPERL_INPUT_FUNC

Diese Konfigurationsanweisung erm�glicht, statt den Quellentext
aus einer Datei zu lesen (oder ihn einem Skalar zu entnehmen), die 
angegebene Funktion aufzurufen, welche f�r das Bereitstellen des
Quellentextes verantwortlich ist.
Die Funktion mu� folgenderma�en aussehen:

 InputFunc ($r, $in, $cacheargs, weitere Parameter...) ;

=over 4

=item B<$r>

Apache Request Record (siehe B<perldoc Apache>)

=item B<$in>

eine Referenz auf einen Skalar, in welchen der Quellentext abgelegt werden soll.

 Beispiel:

 open F, "filename" ;
 local $/ = undef ;
 $$in = <F> ;
 close F ;

=item B<$cacheargs>

eine Referenz auf einen Skalar, welcher den Zeitpunkt der letzten �nderungen zur�ck liefern soll,
alternativ kann (ab 1.2.1) eine Hashreferenz mit den Elementen C<mtime> und C<inputfile> angegeben werden,
um das korrekte cachen des vorcompilierten Perlcodes zu erm�glichen.

 Beispiel:

 $$cacheargs = -M "filename" ;

 oder

 $$cacheargs = { mtime => -M "filename", inputfile => "filename" }  ;


=back

Es k�nnen B<weitere Parameter> (Kommasepariert) in B<EMBPERL_INPUT_FUNC>
angegeben werden, welche dann an die Funktion durchgereicht werden.

  Beispiel:

  PerlSetEnv EMBPERL_INPUT_FUNC "InputFunc, foo, bar"

  wird zu folgendem Funktionsaufruf

  InputFunc ($r, $in, $mtime, 'foo', 'bar') ;


Beispiel f�r eine Funktion, die das gleiche macht wie I<Embperl>:

 sub Input

    {
    my ($r, $in, $mtime) = @_ ;

    open F, $r -> filename or return NOT_FOUND ;
    local $\ = undef ;
    $$in = <F> ;
    close F ;

    $$mtime = -M $r -> filename ;
    
    return 0 ;
    }



Siehe auch L<ProxyInput|"ProxyInput ($r, $in, $mtime, $src, $dest)">,
f�r eine Funktion die von I<Embperl> bereit gestellt wird.

HINWEIS: Es gibt weiterhin zwei Module (I<HTML::EmbperlChain> und I<Apache::EmbperlFilter>)
die die M�glichkeit bieten I<Embperl> und andere Module zu verketten.


=head2 EMBPERL_OUTPUT_FUNC

Diese Konfigurationsvariable erlaubt das Angeben einer Funktion, die die
Ausgabe erledigt. Die Funktion mu� folgende Form haben:

 OutputFunc ($r, $out, weitere Parameter...) ;


=over 4

=item B<$r>

Apache Request Record (siehe B<perldoc Apache>)

=item B<$out>

Referenz auf einen Skalar, welcher die Ausgabe von I<Embperl> enth�lt.


=back

Es k�nnen B<weitere Parameter> (Kommasepariert) in B<EMBPERL_INPUT_FUNC>
angegeben werden, welche dann an die Funktion durchgereicht werden.

  Beispiel:

  PerlSetEnv EMBPERL_OUTPUT_FUNC "OutputFunc, foo, bar"

  wird zu folgendem Funktionsaufruf

  OutputFunc ($r, $out, 'foo', 'bar') ;


Beispiel f�r eine Funktion, die das gleiche macht wie I<Embperl>:

 sub Output

    {
    my ($r, $out) = @_ ;

    $r -> send_http_header ;

    $r -> print ($$out) ;

    return 0 ;
    }



Siehe auch L<LogOutput|"LogOutput ($r, $out, $basepath)">,
f�r eine Funktion die von I<Embperl> bereit gestellt wird.

HINWEIS: Es gibt weiterhin zwei Module (I<HTML::EmbperlChain> und I<Apache::EmbperlFilter>)
die die M�glichkeit bieten I<Embperl> und andere Module zu verketten.

=head2 EMBPERL_MAILHOST

Gibt den Rechner an, der von der L<MailFormTo|"MailFormTo($MailTo, $Subject, $ReturnField)"> 
Funktion als SMTP Server genutzt wird.
Default ist B<localhost>.

=head2 EMBPERL_MAILHELO (ab 1.3b4)

Gibt den Rechner/die Domain an, der von der L<MailFormTo|"MailFormTo($MailTo, $Subject, $ReturnField)"> 
Funktion im HELO/EHLO Befehl angegeben wird.
Normalerweise setzt I<Net::SMTP> einen sinnvollen Defaultwert ein. In
Abh�nigkeit von der Installation kann es jedoch manchmal n�tig sein
diesen Wert von Hand zu setzen.

=head2 EMBPERL_MAILFROM (ab 1.2.1)

Gibt die Absender EMail-Adresse an die von der L<MailFormTo|"MailFormTo($MailTo, $Subject, $ReturnField)"> 
Funktion genutzt wird.
Default ist B<www-server@server_name>.

=head2 EMBPERL_MAILDEBUG (ab 1.2.1)

Debugeinstellung f�r Net::SMTP. Default ist 0.

=head2 EMBPERL_MAIL_ERRORS_TO (ab 1.2b6) 

Wenn hier eine E-Mail Adresse angegeben ist, wird beim Auftreten eines
Fehlers, ein E-Mail mit den
Fehlermeldungen an diese Adresse versandt.

=head2 EMBPERL_SESSION_CLASSES

Hier wird, durch Leerzeichen getrennt, die Klasse f�r Object Store und Lock Manager (und
optional f�r die Serialisierung und das Generieren der ID) von 
I<Apache::Session> angegeben (siehe L<"Session Handling"|"Session Handling (ab 1.2b2)">)

=head2 EMBPERL_SESSION_ARGS

Liste von zus�tzlichen Parametern f�r I<Apache::Session> Klassen (Leerzeichen getrennt)
(siehe L<"Session Handling"|"Session Handling (ab 1.2b2)">). 
Argumente die Leerzeichnen enthalten, m�ssen in Anf�hrungszeichen geschriebene werden.
Beispiel:

  PerlSetEnv EMBPERL_SESSION_ARGS "DataSource=dbi:mysql:session UserName=www 'Password=secret word'"

=head2 EMBPERL_SESSION_HANDLER_CLASS (ab 1.3b3)

Bestimmt die Klasse die das Session Handling f�r I<Embperl> durchf�hrt.
Default war bis 1.3.3 I<HTML::Embperl::Session>. Ab 1.3.4 ist der Default 
I<Apache::SessionX>. Um das alte Sessionhandling zu verwenden, k�nnen Sie den
Parameter auf I<HTML::Embperl::Session> setzen. Sie k�nnen eine eigene Klasse von 
I<Apache::SessionX> ableiten und diese hier angeben um Ihr eigenes
Session Handling zu implementieren.

=head2 EMBPERL_COOKIE_NAME (ab 1.2b4) 

Gibt den Namen des Cookies an, das I<Embperl> benutzt, um die Session Id zu senden.
Default ist EMBPERL_UID.

=head2 EMBPERL_COOKIE_DOMAIN (ab 1.2b4) 

Gibt die Domain des Cookies an, das I<Embperl> benutzt, um die Session Id zu senden.
Default ist keine Domain.

=head2 EMBPERL_COOKIE_PATH (ab 1.2b4) 

Gibt den Pfad des Cookies an, das I<Embperl> benutzt, um die Session Id zu senden.
Default ist kein Pfad.

=head2 EMBPERL_COOKIE_EXPIRES (ab 1.2b4) 

Gibt den Ablaufzeitpunkt des Cookies an, das I<Embperl> benutzt, um die Session Id zu senden.
Es kann ein vollst�ndiges Datum oder (ab 1.3b5) relative Werte angegeben werden.
Beispiele: +30s +10m +1h -1d +3M +10y
Default ist kein Ablaufzeitpunkt.



=head1 Syntax

Embperl versteht zwei Katagorien von Befehlen. Die erste Kategorie sind
spezielle I<Embperl> Befehle, die zweite besteht aus einer Reihe von
HTML Tags, die spezielle Funktionen ansto�en.

Bevor I<Embperl> Befehle bearbeitet (ebenso f�r Argumente von HTML Tags,
die von I<Embperl> bearbeitet werden), werden alle HTML Tags, die sich innerhalb des
Perlcodes befinden, entfernt und HTML kodierte Zeichen werden in ihre Ascii
�quvivalente umgewandelt, so da� sie der Perlinterpreter versteht.
Dies ist n�tig, um HTML Seiten, die von (WYSIWYG) HTML-Editoren erzeugt werden,
zu verarbeiten. (z.B. um ein <BR> innerhalb des Perlcodes zu entfernen, welches
der HTML Editor in den Perlcode eingef�gt hat, an einer Stelle, wo lediglich ein
Zeilenumbruch sein sollte.) 
Um dieses zu unterbinden, k�nnen HTML Tags und HTML kodierten Zeichen (beides nur
innerhalb des Perlcodes) ein Backslash ('\') vorangestellt werden.

B<WICHTIGER HINWEIS:> Wenn Sie einen Ascii Editor benutzen, um Ihre HTML Dokumente
zu schreiben, sollten Sie die Option L<optRawInput> setzen. Dies verhindert das 
I<Embperl> den Quellentext in der oben beschriebenen Weise vorverarbeitet.

B<Sollten Sie Probleme mit Ihrem Code haben, speziell mit HTML Tags oder
Dateihandles, versichern Sie sich, da� Sie die Ein- und Ausgabekodierung und
-dekodierung, die Embperl durchf�hrt, verstanden haben. Weitere Hinweise finden sich
im Abschnitt L<"Inside Embperl"|"Inside Embperl - Wie der Embedded Perl Code intern ausgef�hrt wird">
und in den FAQs.>

Alle I<Embperl> Befehle fangen mit einer eckigen Klammer ('[') an und Enden mit
der geschlossenen eckigen Klammer (']'). Um eine normale '[' im HTML Text zu erhalten,
ist es n�tig '[[' zu schreiben.

I<Embperl> benutzt keine HTML Kommentare (z.B. <! ... !>) oder andere spezielle
HTML Tags, da es mit manchen HTML Editoren nicht, oder nur sehr umst�ndlich,
m�glich ist, diese zu erzeugen. Da '[' von den HTML Editoren als normaler Text interpretiert wird,
sollte es damit keinerlei Probleme geben, es vereinfacht in den meisten F�llen das schreiben 
der Dokumente erheblich.


=head2 [+ Perl Code +]

Ersetzt den Befehl durch das Resultat der Ausf�hrung des Perl codes.
C<Perl Code> kann dabei beliebiger Perl code sein.

Beispiel:


 [+ $a +]        Ersetzt [+ $a +] mit dem Inhalt der Variablen $a.

 [+ $a+1 +]      Beliebige Ausdr�cke k�nnen benutzt werden.

 [+ $x[$i] +]    Auch Arrays, Hashs oder komplexere Ausdr�cke sind kein Problem

B<HINWEIS:> Leerzeichen werden ignoriert.  Die Ausgabe wird automatisch HTML kodiert
(z.B. wird '<' zu '&lt;'). Die Ausgabekodierung kann mit der Variablen
L<$escmode> gesteuert werden.


=head2 [- Perl Code -]

F�hrt den C<Perl Code> aus. In der Ausgabe wird dieser Befehl jedoch vollst�ndig entfernt.

Beispiel:

 [- $a=1 -]            Setzt die Variable $a auf 1.

 [- use SomeModule -]  Andere Perlmodule k�nnen genutzt werden.

 [- $i=0; while ($i<5) {$i++} -]  Auch komplexer Code kann verwendet werden.
 
B<HINWEIS:> Perlbefehle, wie C<if>, C<while>, C<for>, etc., m�ssen innerhalb eines
I<Embperl> Blockes abgeschlossen werden. Es ist nicht m�glich das C<if> in einem
Block zu schreiben und die abschlie�enden Klammer ('}') in einem anderen Block.
Dies ist nur mit L<[* Perl Code *]> Bl�cken m�glich.

B<HINWEIS:> Um Perlfunktionen zu definieren, benutzen Sie L<"[! Perl Code !]"> (siehe unten)
da dies vermeidet, dass die Funktion bei jedem Aufruf neu �bersetzt wird.


=head2 [! Perl Code !]

Wie L<[- Perl Code -]> wird aber nur beim ersten Aufruf des Dokuments ausgef�hrt.
Dies kann genutzt werden, um Perlfunktionen zu definieren oder einmalige Initialisierungen
auszuf�hren.


=head2 [* Perl Code *]

(ab 1.2b2)

�hnlich wie L<C<[- Perl Code -]>>. Der Hauptunterschied ist, da� C<[- Perl Code -]> Bl�cke immer
ihren eigenen G�ltigkeitsbereich haben, w�hrend C<[* Perl Code *]> Bl�cke im selben 
G�ltigkeitsbereich ablaufen.
Dies erm�glicht lokale Variablen (mit C<local>) mit einem G�ltigkeitsbereich, der die ganze Seite
umfasst, zu definieren. Normalerweise ist es nicht n�tig lokale Variablen zu definieren, da
Embperl jedem Dokument einen eigenen Namensraum zuordnet und die globalen Variablen nach jedem
Request wieder aufger�umt werden. In speziellen F�llen (z.B. um eine I<Embperl> Seite rekursiv mittes L<Execute>
aufzurufen), ist es jedoch hilfreich.

Ein zweiter Grund ist, die M�glichkeit Perlbefehle zu nutzen, die sich �ber
mehrere Bl�cke hinziehen. Perls C<if>, C<while>, C<for>, etc. k�nnen sich
nicht �ber mehrere L<C<[- Perl Code -]>> Bl�cke hinziehen, jedoch sehr wohl
�ber mehrere L<C<[* Perl Code *]>> Bl�cke.

Beispiel:

  [* foreach $i (1..10) { *]
    
    [- $a = $i + 5 -]
    Schleifenz�hler + 5 = [+ $a +] <br>

  [* } *]

Folgendes hingegen funktioniert B<nicht>:

  [- foreach $i (1..10) { -]
    irgendwelcher Text <br>
  [- } -]

Der selbe Effekt kann mit  I<Embperl> L<Meta Commands|"[$ Cmd Arg $]  (Meta-Commands)">
erzielt werden (siehe unten)

  [$ foreach $i (1..10) $]
    
    [- $a = $i + 5 -]
    Schleifenz�hler + 5 = [+ $a +] <br>

  [$ endforeach $]

B<HINWEIS 1:> C<[* ... *]> Bl�cke B<m�ssen> immer mit B<;>,B<{> oder B<}> enden!

B<HINWEIS 2:> C<[* ... *]> Bl�cke k�nnen nicht innerhalb eines HTML Tags, welches
von I<Embperl> interpretiert wird, verwendet werden.
(Au�er die Bearbeitung des entsprechden Tags wurde ausgeschaltet)

B<HINWEIS 3:> Da die Ausf�hrung von C<[- ... -]> Bl�cken durch I<Embperl> gesteuert
wird, kann I<Embperl> deutlich detailliertere debugging Ausgaben in der Logdatei
daf�r erzeugen. Au�erdem existieren f�r C<[- ... -]> keinerlei Restriktionen, wo sie
genutzt werden k�nnen.


=head2 [# Text #]  (Kommentar)

(ab1.2b2)

Dies ist ein Kommentarblock. Alles zwischen C<[#> und C<#]> wird aus dem HTML Dokument
entfernt, bevor es zum Browser gesandt wird.

B<HINWEIS 1:> C<[* ... *]> Bl�cke werden vor Kommentarbl�cken ausgewertet, deshalb werden
sie auch innerhalb von Kommentarbl�cken ausgef�hrt.

B<HINWEIS 2:> Alles innerhalb des Komentarblocks (au�er C<[* ... *]>) wird aus dem Quellentext entfernt,
deshalb ist es m�glich, Teile des Dokuments damit auszukommentieren.


=head2 [$ Cmd Arg $]  (Meta-Commands)

Ausf�hren eines I<Embperl> Meta-Commands.  B<Cmd> kann einer der folgenden
Befehle sein:
(B<Arg> variiert, je nach Befehl).

=over 4

=item B<if>, B<elsif>, B<else>, B<endif>

Alles nach dem B<if> Meta-Command bis zum B<else>,
B<elsif> oder B<endif> wird nur ausgegeben, wenn der Perlausdruck, welcher durch
B<Arg> gegeben ist, I<wahr> ist.  B<else> und B<elsif> funktionieren entsprechend.

Beispiel:

 [$ if $ENV{REQUEST_METHOD} eq 'GET' $]
 Methode ist GET<BR>
 [$ else $]
 Andere Methode als GET wurde benutzt<BR>
 [$ endif $]

Dieses Beispiel sendet einen der zwei S�tze zum Browser, in Abh�nigkeit davon,
ob die GET-Methode benutzt wurde, um dieses Dokument abzurufen.

=item B<while>, B<endwhile>

F�hrt eine Schleife aus, bis B<Arg> des B<while> Befehls I<falsch> ist.

Beispiel: (siehe auch eg/x/loop.htm aus der Embperl Distribution)

 [- $i = 0; @k = keys %ENV -]
 [$ while ($i &lt; $#k) $]
 [+ $k[$i] +] = [+ $ENV{$k[$i]} +]<BR>
 [- $i++ -]
 [$ endwhile $]

Dies sendet alle Umgebungsvariablen zum Browser.

B<HINWEIS>: '&lt;' wird zu '<' bevor es vom Perlinterpreter ausgef�hrt wird,
au�er L<optRawInput> ist gesetzt.

=item B<do>, B<until>

F�hrt eine Schleife aus, bis B<Arg> des B<until> Befehls I<wahr> ist.

Beispiel:

 [- $i = 0 -]
 [$ do $]
     [+ $i++ +] <BR>
 [$ until $i > 10 $]

=item B<foreach>, B<endforeach>

F�hrt eine Schleife aus, f�r jedes Element des Array, welches als zweites
in B<Arg> steht, wobei die Variable, die als erstes in B<Arg> angegeben ist,
auf den entsprechenden Wert gesetzt wird.

Beispiel:

 [- @arr = (1, 3, 5) -]
 [$ foreach $v @arr $]
     [+ $v +] <BR>
 [$ endforeach $]


=item B<hidden>

B<Arg> gibt keinen, einen oder zwei Hashs an (mit oder ohne
f�hrendes '%' Zeichen) und ein optionales Array als dritten Parameter.
C<hidden> erzeugt versteckte Eingabefelder f�r alle Werte, die im ersten Hash,
jedoch nicht im zweiten Hash, enthalten sind. Default ist
C<%fdat> und C<%idat>. Wenn der dritte Parameter angegeben ist, gibt er die
Reihenfolge der Felder an. Default ist C<@ffld>.
Wenn Sie keine Parameter angeben, erzeugt I<Embperl> f�r alle Werte, die
an dieses Dokument geschickt wurden (in C<%fdat> stehen), verstecke
Eingabefelder, soweit daf�r nicht schon andere Eingabefelder existieren.
Dies ist n�tzlich, um Werte zwischen mehreren Formularen zu transportieren.


Beispiel: (siehe auch eg/x/input.htm aus der Embperl Distribution)

    <FORM ACTION="inhalt.htm" METHOD="GET">
	<INPUT TYPE="TEXT" NAME="field1">
    [$ hidden $]
    </FORM>

Wenn Sie dieses Dokument mit 
    
    http://host/doc.htm?field1=A&field2=B&field3=C

aufrufen, erzeugt I<Embperl> folgende Ausgabe:

    <FORM ACTION="inhalt.htm" METHOD="GET">
	<INPUT TYPE="TEXT" NAME="feld1" VALUE="A">
	
    <INPUT TYPE="HIDDEN" NAME="field2" VALUE="B">
    <INPUT TYPE="HIDDEN" NAME="field3" VALUE="C">
    </FORM>



=item B<var>

Das C<var> Meta-Command definert eine oder mehrere Variablen zur Benutzung
innerhalb dieser Embperlseite und setzt das 
B<strict> Pragma. Die Variablennamen m�ssen durch Leerzeichen getrennt werden.

Beispiel:
	
	[$var $a %b @c $]

Dies entspricht dem folgendem Perl code:

	use strict ;
	use vars qw($a %b @c) ;

B<HINWEIS>: 'use strict' innerhalb eines I<Embperl> Dokuments gilt nur innerhalb des Blockes, 
in dem es erscheint.


=item B<sub>

(ab Embperl 1.2b5)

Definiert eine Embperl-Funktion. Beispiel:

  [$ sub foo $]
    <p> Hier steht was </p>
  [$ endsub $]

Diese Funktion kann entweder als normale Perlfunktion aufgerufen werden:

  [- foo -]

oder mittels der L<HTML::Embperl::Execute> Funktion.

  [- Execute ('#foo')           # Kurzform -]
  [- Execute ({ sub => 'foo'})  # Langform -]

Der Unterschied ist, das I<Embperl> nach dem Aufruf einer Embperl-Funktion
mittels C<Execute>, die internen Zust�nde (Optionen, Debugflags etc.) 
wieder auf die Werte vor dem Aufruf zur�cksetzt. Au�erdem ist es m�glich
mittels C<Execute> rekursive Funktionsaufrufe zu implementieren.

Es ist ebenfalls m�glich Parameter an eine Embperl-Funktion zu �bergeben:

  [$ sub foo $]
    [- $p = shift -]
    <p> Hier zeigen wir den ersten Parameter [+ $p +]</p>
  [$ endsub $]

  
  [- foo ('value') -]


Wenn Sie eine Reihe von oft ben�tigten Funktionen haben, k�nnen Sie sie in
einer I<Embperl> Datei definieren und in Ihre Dokumente importieren:

  [- Execute ({ inputfile => 'mylib.htm', import => 1 }) -]

Dies importiert alle Embperl-Funktionen, die in der Datei F<mylib.htm> 
definiert sind, in die aktuelle Seite, wo sie dann als normale Perlfunktionen
aufgerufen werden k�nnen.


=back

=head2 HTML Tags

I<Embperl> behandelt die folgenden HTML Tags speziell.

=over 4

=item B<TABLE>, B</TABLE>, B<TR>, B</TR>

I<Embperl> kann dynamische Tabellen erzeugen (ein- oder zweidimensional). Dazu
ist es lediglich n�tig, eine Zeile oder Spalte anzugeben, I<Embperl> expandiert
die Tabelle so weit wie n�tig.
Dies geschieht durch die Benutzung der "magischen" Variablen C<$row>, C<$col>
oder C<$cnt>. Solange Sie nicht eine der drei Variablen innerhalb einer Tabelle
ben�tzen, l��t I<Embperl> die Tabelle unver�ndert.

I<Embperl> �berpr�ft ob C<$row>, C<$col> oder C<$cnt> benutzt werden und wiederholt
allen Text zwischen <TABLE> und </TABLE>, solange der Block in dem
C<$row> oder C<$cnt> enthalten sind, ein Ergebnis ungleich I<undef> zur�ck gibt.
Aller Text zwischen <TR> und </TR> wird wiederholt, wenn die Variable C<$col>
benutzt wird und der Block, indem sie vorkommt, einen definierten R�ckgabewert hat.
R�ckgabewert ist dabei immer das Ergebnis des letzten Ausdrucks innerhalb des Blocks.

Mittels L<$tabmode> (siehe unten) kann das Tabellenendekriterium variiert werden.

Beispiel: (siehe eg/x/table.htm in der Embperl Distribution f�r weitere Beispiele)

 [- @k = keys %ENV -]
 <TABLE>
     <TR>
         <TD>[+ $i=$row +]</TD>
         <TD>[+ $k[$row] +]</TD>
         <TD>[+ $ENV{$k[$i]} +]</TD>
     </TR> 
 </TABLE>


Der obige Code zeigt alle Elemente des Array C<@k> (das die Schl�ssel von 
C<%ENV> enth�lt) an, so dass alle Umgebungsvariablen (wie im Beispiel
zu I<while>) angezeigt werden. Dabei enth�lt die erste Spalte den
Index (ab Null z�hlend), die zweite Spalte den Variablennamen und
die dritte Spalte den Wert der Umgebungsvariablen.


=item B<TH>, B</TH>

Das <TH> Tag wird als Tabellen�berschrift interpretiert. Wenn die ganze 
Zeile aus <TH> und </TH>, statt aus <TD> und </TD> besteht, werden die
Zellen als Spalten�berschriften interpretiert und nur einmal ausgegeben.

=item B<DIR>, B<MENU>, B<OL>, B<UL>, B<DL>, B<SELECT>, B</DIR>, B</MENU>,
B</OL>, B</UL>, B</DL>, B</SELECT>

Listen, Men�s und Listboxen werden genau wie eindimensionale Tabellen
behandelt. Nur L<"$row">, L<"$maxrow">, L<"$col">, L<"$maxcol"> und L<"$tabmode">
werden beachtet, L<$col> und L<$maxcol> werden ignoriert.  Siehe auch
F<eg/x/lists.htm> aus der I<Embperl> Distribution f�r ein Beispiel.

=item B<OPTION>

I<Embperl> pr�ft ob ein Wert f�r die entsprechende Option in den
Formulardaten (C<%fdat>) vorhanden ist. Wenn ja wird die
Option als I<ausgew�hlt> angezeigt.

Beispiel:

    <FORM METHOD="POST">
      <P>Select Tag</P>

      Wenn Sie dieses Dokument mit list.htm?SEL1=x aufrufen,
      k�nnen Sie die Option bestimmen, die angew�hlt erscheint.

      <P><SELECT NAME="SEL1">
         <OPTION VALUE="[+ $v[$row] +]">
            [+ $k[$row] +]
         </OPTION>
      </SELECT></P>
    </FORM>


=item B<INPUT>

Das C<INPUT> Tag arbeitet mit den Hashs C<%idat> und C<%fdat> zusammen.
Wenn das C<INPUT> Tag kein C<VALUE> Attribute hat, jedoch in C<%fdat> ein
Element, das dem C<NAME> Attribute entspricht, existiert, erzeugt I<Embperl>
ein C<VALUE> Attribute mit dem Wert aus C<%fdat>.
Alle Werte der C<INPUT> Tags werden in dem Hash C<%idat>, mit dem Namen 
des C<INPUT> Tags als Schl�ssel und ihrem Wert, gespeichert.
F�r Radiobuttons und Checkboxen (C<TYPE=RADIO> und C<TYPE=CHECKBOX>), wird
das C<CHECKED> Attribute eingef�gt, wenn der Wert des C<VALUE> Attributes
mit dem Wert in C<%fdat> �bereinstimmt, andernfalls wird C<CHECKED>
entfernt.

Das bedeutet, wenn Sie die Formulardaten an das Dokument selbst schicken
(die URL des C<ACTION> Attributes entspricht dem aktuellen  Dokument
oder fehlt ganz), zeigen alle C<INPUT> Tags automatisch die selben 
Werte an, die der Benutzer vor dem Absenden eingegeben hat.


=item B<TEXTAREA>, B</TEXTAREA>

Das C<TEXTAREA> Tag wird genau wie ein normales C<INPUT> Tag behandelt (siehe oben)


=item B<META HTTP-EQUIV= ...>

C<META HTTP-EQUIV= ... > �berschreibt den entsprechenden HTTP Header. Dies
verhindert, das Netscape nachfragt, ob das Dokument neu geladen werden soll,
wenn der Content-Type zwischen C<META HTTP-EQUIV> und HTTP Header unterschiedlich
ist.

Dies kann ebenfalls benutzt werden, um beliebige HTTP Header zu setzen.
Unter I<mod_perl> k�nnen HTTP Header auch mit der Funktion C<header_out>
gesetzt werden.

Beispiel:

    <META HTTP-EQUIV="Language" CONTENT="DE">

Das entspricht der Apachefunktion:

    [- $req_rec ->� header_out("Language" => "DE"); -]

=item B<A>, B<EMBED>, B<IMG>, B<IFRAME>, B<FRAME>, B<LAYER>

Die Ausgaben von Perlbl�cken innerhalb des C<HREF> Attributes des C<A> Tags und des
C<SRC> Attributes der anderen Tags werden URL Kodiert, statt HTML Kodiert.
(siehe auch L<$escmode>). Des weiteren expandiert I<Embperl> Array- und Hashreferenzen
innerhalb solcher URLs zur URL Parametersyntax. Beispiel:

  [-
  $A = {A => 1, B => 2} ;  # Hashreference
  @A = (X, 9, Y, 8, Z, 7)
  -]

  <A HREF="http://localhost/tests?[+ $A  +]">
  <A HREF="http://localhost/tests?[+ \@A +]">

wird von I<Embperl> zu Folgendem expandiert:

  <A HREF="http://localhost/tests?A=1&B=2">
  <A HREF="http://localhost/tests?X=9&Y=8&Z=7">


=back


=head1 G�ltigkeitsbereiche von Variablen und Cleanup


Der G�ltigkeitsbereich von Variablen, die mit C<my> oder C<local>
deklariert wurden, endet am Ende des umschlie�enden C<[+/- ... -/+]>
Blocks. Der C<[+/- ... -/+]> Block verh�lt sich in dieser hinsicht
wie Perls C<{ ... }>.

Globale Variablen (alles was nicht mittels C<my> oder C<local>
deklariert wurde) werden am Ende jedes Request automatisch wieder
gel�scht (insofern verhalten sie sich wie Variablen, deren G�ltigkeitsbereich
das gesamte Dokument ist). Dies verhindert Probleme mit Variablen,
die ihren Wert aus dem vorangegangenen Request behalten haben.
Das Cleanup wird nur f�r Variablen innerhalb des Packages, der gerade
ausgef�hrten Embperlseite, durchgef�hrt, d.h. alle Variablen die ohne expliziten
Packagenamen deklariert wurden. Alle Variablen in anderen Packages
(z.B. andere Perl Module) bleiben g�ltig. 

Der Packagename der aktuellen Seite wird normalerweise von I<Embperl>
eindeutig vergeben, kann aber mittels L<EMBPERL_PACKAGE> explizit
angegeben werden.

Da CGI Skripte sowieso immer als eigenst�ndiger Proze� ausgef�hrt werden,
ist ein Cleanup bei CGI Skripten nicht n�tig.

Sollen Variablen nicht am Ende des Request aufger�umt werden, m�ssen sie
entweder im Hash C<%CLEANUP> (mit Wert 0) eingetragen sein oder innerhalb eines anderen
Packages (z.B. C<$Persistent::handle>) deklariert werden.

Wenn Sie das C<strict> Pragma (C<use strict>) nutzen wollen, k�nnen sie
Ihre Variablen mittels des C<var> Meta-Commands deklarieren.

B<HINWEIS:> Da I<Apache::DBI>, wie jedes andere Perlmodul, seinen eigenen
Namensraum hat, funktioniert es ohne Problem zusammen mit I<Embperl>.

Das automatische Cleanup kann mittels L<EMBPERL_OPTIONS> bzw. dem
L<cleanup> Parameter der L<Execute> Funktion abgeschaltet werden.

Ausnahmen f�r Variablen, die B<nicht> oder zus�tzlich aufger�umt werden sollen, k�nnen
mittels des Hash L<%CLEANUP> angegeben werden.

Es ist ebenfalls m�glich eine Funktion aufrufen zulassen, wenn I<Embperl>
sein Cleanup durchf�hrt. Soweit definiert, wird die Funktion B<CLEANUP>
aufgerufen, direkt bevor die weiteren Variablen aufger�umt werden.

 Beispiel:

  [! sub CLEANUP { $obj -> term ; } !]


=head1 Vordefinierte Variablen

I<Embperl> hat einige spezielle Variablen mit einer vorgegebenen Bedeutung.


=head2 %ENV

Enth�lt die selben Umgebungsvariablen, wie bei einem CGI Skript.

=head2 %fdat

Enth�lt alle Formulardaten, die an das Dokument gesendet wurden.
Das C<NAME> Attribute bildet den Schl�ssel und das C<VALUE>
Attribute den Wert des Hashelements. Dabei ist es egal, ob die Daten mittels
C<GET> oder C<POST> �betragen wurden. Existieren mehrere Werte mit dem selben Namen,
werden diese mittels C<TAB> getrennt. Diese k�nnen z.B. mittels folgenden Code in
ein Array zerlegt werden:

  @array = split (/\t/, $fdat{'fieldname'}) ;

I<Embperl> unterst�tzt ebenfalls den Kodierungstyp B<multipart/form-data>,
der f�r Dateiuploads benutzt wird. Das Element in C<%fdat> enth�lt dann
eine Dateihandle (entsprechend CGI.pm), die benutzt werden kann, um die 
Datei auszulesen.

Dateiupload Beispiel:

HTML Formular:

    <FORM METHOD="POST" ENCTYPE="multipart/form-data">
      <INPUT TYPE="FILE" NAME="ImageName">
    </FORM>

Embperl ACTION:

    [- if (defined $fdat{ImageName}) {
         open FILE, "> /tmp/file.$$";
	 print FILE $buffer
           while read($fdat{ImageName}, $buffer, 32768);
         close FILE;
       }
    -]
	
Wenn I<CGI.pm> 2.46 oder h�her installiert ist, ist es weiterhin m�glich den
Dateinamen (den B<lokalen> Dateinamen, wie er auf seiten des Browsers hei�t)
und Informationen, die von der I<CGI.pm> Funktion C<uploadInfo> zur Verf�gung 
gestellt werden, zu erhalten. Der Dateiname ist in dem entsprechenden
C<%fdat> Element direkt enthalten. Um auf die B<uploadInfos> zuzugreifen, mu� man 
dem Feldnamen einen Bindestrich voranstellen:

Beispiel:

  # ImageName ist der NAME des Feldes. 
  # Er durch den im HTML Code angegeben ersetzt werden.
  Dateiname:     [+ $fdat{ImageName} +] <br>
  Content-Type:  [+ $fdat{-ImageName} -> {'Content-Type'} +] <br>

B<HINWEIS:> Der Zugriff auf die B<Upload-Infos> erfolgte vor 1.2b11 auf andere
Art und Weise, die nicht mehr unterst�tzt wird.

B<HINWEIS:> Dies funktioniert ebenfalls in die andere Richtung. Bei Inputtags deren
Name einem %fdat Schl�ssel entspricht und die kein Value Attribute haben wird
automatisch der Wert aus %fdat als Value eingesetzt. Siehe L<"HTML Tags"> C<INPUT/OPTION/TEXTAREA>. 

=head2 @ffld

Enth�lt alle Formularfeldnamen in der Reihenfolge, wie sie vom Browser 
geschickt wurden. Dies entspricht normalerweise der Reihenfolge, wie
sie im Formular erscheinen.

=head2 %idat

Enth�lt alle Werte von allen C<INPUT>, C<TEXTAREA> und C<SELECT/OPTION> Tags,
die in der Seite vorangehen.

=head2 %udat (ab 1.2b1)

Sie k�nnen C<%udat> benutzen, um Daten pro Benutzer zu speichern. Solange Sie nicht
auf C<%udat> zugreifen passiert gar nichts, sobald jedoch Daten in C<%udat>
geschrieben werden, erzeugt I<Embperl> eine Session Id und sendet sie mittels eines
Cookies zum Browser. Die Daten die in C<%udat> abgelegt wurden, werden mittels
I<Apache::Session> gespeichert. Wenn der B<selbe> Benutzer die n�chste I<Embperl> Seite
aufruft, sendet der Browser den Cookie mit der Session Id zur�ck und I<Embperl>
stellt die Daten in C<%udat> wieder her. (siehe auch Abschnitt �ber L<"Session Handling"|"Session Handling (ab 1.2b2)">)

=head2 %mdat (ab 1.2b2)

C<%mdat> speichert Daten je Seite. Solange Sie nicht
auf C<%mdat> zugreifen passiert gar nichts, sobald jedoch Daten in C<%mdat>
geschrieben werden, erzeugt I<Embperl> eine Seiten Id und speichert die Daten mittels
I<Apache::Session>. Wenn ein Benutzer die B<selbe> I<Embperl> Seite
aufruft, stellt I<Embperl> die Daten in C<%mdat> wieder her.
(siehe auch Abschnitt �ber L<"Session Handling"|"Session Handling (ab 1.2b2)">)

=head2 $row, $col

Reihen und Spaltenz�hler f�r dynamische Tabellen.
(Siehe L<"HTML Table Tag"|"HTML Tags">.)

=head2 $maxrow, $maxcol

Maximale Anzahl von Reihen oder Spalten einer dynamischen Tabelle.
Diese Werte werden per default auf 100 f�r C<$maxrow> und 10 f�r
C<$maxcol> gesetzt um Endlosschleifen zuverhindern.
(Siehe L<"HTML Table Tag"|"HTML Tags">.)

=head2 $cnt

Enth�lt die Anzahl der Tabellenzellen, die bis jetzt angezeigt wurden.
(Siehe L<"HTML Table Tag"|"HTML Tags">.)

=head2 $tabmode

Entscheidet, wann das Tabellenende erreicht ist. Dynamische Tabellen
werden immer durch $maxrow und $maxcol begrenzt. Zus�tzlich k�nnen
folgende Bedinungen f�r das Tabellenende festgelegt werden:

=over 4

=item $tabmode = 1

Ende, wenn B<ein> Block der C<$row> enth�lt, C<undef> als Ergebnis hat.
Die Reihe, die den undefinierten Ausdruck enth�lt, wird B<nicht> mehr angezeigt.

=item $tabmode = 2

Ende, wenn B<ein> Block der C<$row> enth�lt, C<undef> als Ergebnis hat.
Die Reihe, die den undefinierten Ausdruck enth�lt, B<wird> angezeigt.

=item $tabmode = 4

Ende, wenn C<$maxrow> Reihen angezeigt wurden.

=back

B<Spaltenende:>

=over 4

=item $tabmode = 16

Ende, wenn B<ein> Block der C<$col> enth�lt, C<undef> als Ergebnis hat.
Die Spalte, die den undefinierten Ausdruck enth�lt, wird B<nicht> mehr angezeigt.

=item $tabmode = 32

Ende, wenn B<ein> Block der C<$col> enth�lt, C<undef> als Ergebnis hat.
Die Spalte, die den undefinierten Ausdruck enth�lt, B<wird> angezeigt.

=item $tabmode = 64

Ende, wenn C<$maxcol> Spalten angezeigt wurden.

=back

Der Defaultwert von B<17> ist korrekt zum Anzeigen von Arrays. Es d�rfte selten n�tig
sein diesen Wert zu �ndern. Die Werte f�r Tabellen- und Spaltenende k�nnen addiert werden.

=head2 $escmode

Schaltet die HTML und URL Kodierung der Ausgabe ein und aus.
Default ist ein (C<$escmode> = 3).

B<Hinweis:> Normalerweise kann die Kodierung durch Voranstellen eines Backslashes ('\')
vor das entsprechende Zeichen verhindert werden. Das ist recht n�tzlich, ist aber
in Situation, wo eine Benutzereingabe nochmal angezeigt wird, sehr gef�hrlich, da dies
dem Benuter erm�glich beliebiges HTML einzugeben. Um dies zu verhindern mu� zu den
unten aufgef�hrten Werten jeweils eine 4 addiert werden. Dies f�hrt dazu, dass I<Embperl>
den Backslash bei der Ausgabe nicht gesondert behandelt. (ab 1.3b4)

B<Hinweis 2:>Um bin�re Daten auszugeben mu� escmode auf Null gesetzt werden (ab 1.3b6)

=over 4

=item B<$escmode = 8 (oder 15)> (2.0b4 und h�her)

Das Resultat von Perlausdr�cken wird immer XML Kodiert 
(z.B. '>' wird zu '&gt;' und ' zu &apos;).

=item $escmode = 3 (oder 7)

Das Resultat von Perlausdr�cken wird HTML Kodiert (z.B. '>' wird zu '&gt;')
und URL Kodiert ('&' wird zu '%26') innerhalb von C<A>, C<EMBED>, C<IMG>, C<IFRAME>, C<FRAME> und C<LAYER> Tags.

=item $escmode = 2 (oder 6)

Das Resultat von Perlausdr�cken wird immer URL Kodiert ('&' wird zu '%26').

=item $escmode = 1 (oder 5)

Das Resultat von Perlausdr�cken wird immer HTML Kodiert (z.B. '>' wird zu '&gt;').

=item $escmode = 0

Keine HTML oder URL Kodierung findet statt.

=back

=head2 $req_rec

Diese Variable ist nur vorhanden, wenn I<Embperl> unter I<mod_perl>
l�uft und enth�lt eine Referenz auf den Apache Request Record.
Damit ist es m�glich, alle Apache internen Funktionen zu nutzen.
(siehe B<perldoc Apache> f�r weitere Informationen)

=head2 LOG

Dies ist die Dateihandle der I<Embperl> Logdatei. Durch schreiben auf
diese Dateihandle ist es m�glich, Zeilen in die I<Embperl> Logdatei
zu schreiben.

Beispiel: print LOG "[$$]ABCD: your text\n" ;

Wenn Sie ein Modul schreiben, das ebenfalls die Embperl Logdatei nutzen 
soll, k�nnen Sie folgenderma�en eine Dateihandle daf�r bekommen:

    tie *LOG, 'HTML::Embperl::Log';


=head2 OUT

Diese Dateihandle ist an den I<Embperl> Ausgabestrom gebunden. Ausgaben an diese Handle
haben den selben Effekt wie ein C<[+ ... +]> Block.
(Siehe auch L<optRedirectStdout|"EMBPERL_OPTIONS">)

=head2 @param

Wird durch den C<param> Parameter der C<Execute> Funktion gesetzt. Kann genutzt werden,
um Parameter an ein I<Embperl> Dokument zu�bergeben oder zur�ckzugegben.
(siehe L<Execute|"By calling HTML::Embperl::Execut">)

=head2 %http_headers_out (ab 1.2b10)

Dieser Hash erm�glicht es HTTP Header anzugeben, die I<Embperl> vor dem Dokument senden soll.
Ist ein "Location" Header angegeben, setzt I<Embperl> den Status automatisch auf 301. Beispiel:

  [- $http_headers_out{'Location'} = "http://www.ecos.de/embperl/" -]


Ab 1.3.2 k�nnen alle HTTP Header (au�er "Location" und "Content-Type") auch 
mehrere Werte erhalten. Um z.B. mehrere Cookie zu setzen, kann man folgendes schreiben:


  [- $http_headers_out{'Set-Cookie'} = 
      ['name=cook1;value=2;','name=cook2;value=b'] ; -]

F�r "Location" und "Content-Type" wird nur der erste Wert ber�cksichtigt. Leere
Arrays werden ignoriert. Z.B. f�hrt Folgendes B<nicht> zu einem Redirect:

  [- $http_headers_out{'Location'} = [] ; -]




siehe auch L<META HTTP-EQUIV= ...>

=head2 $optXXX $dbgXXX

Alle Optionen (see L<"EMBPERL_OPTIONS">) und alle Debugflags (siehe L<"EMBPERL_DEBUG">)
k�nnen durch entsprechende Variablen innerhalb der Seite gelesen und gesetzt werden.
 
Beispiel:

    [- $optRawInput = 1 -]  # Anschalten von RawInput 
    [- $optRawInput = 0 -]  # Abschalten von RawInput 
    [+ $dbgCmd +]           # Ausgeben des Zustandes des dbgCmd Flags


Es gibt einige Ausnahmen, bei denen die Optionen lediglich gelesen werden k�nnen. Das Setzen solcher
Optionen ist nur in den Konfigurationsdateien m�glich. Folgende Optionen k�nnen nur gelesen werden:

=over 4

=item $optDisableVarCleanup 

=item $optSafeNamespace     

=item $optOpcodeMask        

=item $optDisableChdir      

=item $optEarlyHttpHeader   

=item $optDisableFormData   

=item $optAllFormData       

=item $optRedirectStdout    

=item $optAllowZeroFilesize 

=item $optKeepSrcInMemory   

=back


=head2 %CLEANUP

I<Embperl> r�umt nur Variablen auf, die innerhalb der I<Embperl> Seite definiert wurden. Sollen
weitere Variablen aufger�umt werden, k�nnen diese dem Hash C<%CLEANUP>, mit dem Variablennamen
als Schl�ssel und einem Wert von B<1>, hinzugef�gt werden. Umgedreht ist es m�glich das Aufr�umen
zu verhindern, wenn der Variablennamen mit einem Wert von B<0> hinzugef�gt wird.

=head2 %CLEANUPFILE (ab 1.2b6)

Hat die selbe Aufgabe wie C<%CLEANUP>, jedoch k�nnen hier Dateinamen hinzugef�gt werden und
alle Variable die in diesen Dateien definiert wurden, werden am jedes des entsprechenden
Requests aufger�umt.


=head1 Session Handling (ab 1.2b2)

I<Embperl> ist in der Lage, Daten pro Benutzer f�r Sie zu verwalten. Sobald
Sie Daten in den Hash C<%udat> schreiben, sorgt I<Embperl> daf�r, dass die
selben Daten wieder verf�gbar sind, sobald der selbe Benutzer eine weitere
Seite aufruft.

Weiterhin k�nnen Sie Daten in dem Hash C<%mdat> ablegen, diese sind der
aktuellen Seite zugeordnet und werden wieder hergestellt, sobald ein
beliebiger Benutzer die selbe Seite aufruft.

Im Gegensatz zu einfachen globalen Variablen, ist der Zugriff auf die Inhalte
von C<%udat> und C<%mdat> bei entsprechender Konfiguration, auch �ber Proze�-
oder sogar Rechnergrenzen hinweg m�glich. I<Embperl> bedient sich dazu
des Perlmodules I<Apache::Session>.

Ab 1.3.4 verwendet I<Embperl> I<Apache::SessionX> f�r das Sessing handling.
Dadurch ist keine weitere Konfiguration mehr n�tig. Wenn Sie das alte 
Sessionhandling (ohne I<Apache::SessionX>) beibehalten wollen, m�ssen
Sie 

    PerlSetEnv EMBPERL_SESSION_HANDLER_CLASS HTML::Embperl::Session

in Ihrer httpd.conf eintragen und folgende Parameter konfigurieren. Sie
k�nnen die folgenden Parameter auch zum �berschreiben der 
Standardkonfiguration von I<Apache::SessionX> benutzen.

Um das Session Management zu aktivieren mu� I<Apache::Session> (Version 1.53
oder h�her) installiert sein. Au�erdem m�ssen Sie I<Embperl>, via 
C<EMBPERL_SESSION_CLASSES>, mitteilen, welcher
Speicher- und Lockingmechanismus genutzt werden soll, ggf. m�ssen Sie
auch weitere Argumente f�r I<Apache::Session> setzen.
Um z.B. eine MySQL Datenbank zur Speicherung der Sessions zu benutzen, k�nnte
die Datei F<startup.pl> folgenderma�en aussehen:

 BEGIN
    {
    $ENV{EMBPERL_SESSION_CLASSES} = "MySQL Semaphore" ;
    $ENV{EMBPERL_SESSION_ARGS}    = "DataSource=dbi:mysql:session UserName=test" ;
    } ;
 use HTML::Embperl ;


Dass selbe kann stattdessen auch direkt in die F<httpd.conf> eingetragen werden:

 PerlSetEnv EMBPERL_SESSION_CLASSES "MySQL Semaphore"
 PerlSetEnv EMBPERL_SESSION_ARGS "DataSource=dbi:mysql:session UserName=test"
 PerlModule HTML::Embperl ;


Konsultieren Sie die Dokumentation von I<Apache::Session> (in diesem Fall
I<Apache::Session::Store::MySQL>) f�r Informationen wie die Datenbanktabellen
dazu aussehen m�ssen.

C<EMBPERL_SESSION_ARGS> ist eine Leerzeichen separierte Liste von Name/Wert Paaren
die zus�tzlich Parameter f�r die I<Apache::Session> Klassen angeben k�nnen.

Hier ist ein weiteres Beispiel f�r die Speicherung der Sessiondaten im Dataisystem:

PerlSetEnv EMBPERL_SESSION_CLASSES "File Semaphore"
PerlSetEnv EMBPERL_SESSION_ARGS "Directory=/path/to/your/sessions"

Konsultieren Sie die Dokumentation von I<Apache::Session> um zu erfahren welche
weiteren Speicherm�glichkeiten es gibt.

Zus�tzlich (optional) zur zur Speicher- und Lockingklasse k�nnen in C<EMBPERL_SESSION_CLASSES>
zwei weitere Klassen angegeben werden. Die erste ist f�r die Serialisierung der Daten zust�ndig
(Default: C<Storable>) und die zweite f�r sas erzeugen der ID
(Default: C<MD5>).


B<HINWEIS:> Die obige Konfiguration funktioniert nur mit I<Apache::Session> 1.52 und 
I<Embperl> 1.3b5 oder
h�her. �ltere Konfigurationen mit I<Apache::Session> werden weiterhin unterst�tzt,
�ltere Versionen von Embperl unterst�tzen nur I<Apache::Session> 1.0x, welches
eine andere Konfiguartion von C<$ENV{EMBPERL_SESSION_CLASSES}> erfordert
(z.B. C<$ENV{EMBPERL_SESSION_CLASSES} = "DBIStore SysVSemaphoreLocker" ; >).



Damit ist das Session Handling eingerichtet und der Benutzung der
Hashs C<%udat> und C<%mdat> steht nichts mehr im Wege. Dabei wird
das Session Handling nur dann aktiv, wenn Sie auf einen der zwei Hashs
zugreifen. Beim ersten Zugriff erzeugt I<Embperl> bzw. I<Apache::Session>
eine Session ID. F�r Benutzerbezogene Session wird diese Id mittels eines
Cookies zum Browser gesandt. Au�erdem veranlasst I<Embperl> I<Apache::Session>
die Daten zu speichern. Empf�ngt I<Embperl> einen solchen Cookie mit einer
Id, wird diese zun�chst nur abgespeichert, erst bei einem Zugriff auf C<%udat>,
werden die Daten tats�chlich von I<Apache::Session> angefordert. Ebenso
werden die Daten f�r C<%mdat> erst von I<Apache::Session> angefordert, wenn
auf diesen Hash zugegriffen wird.

=head2 Funktionen/Methoden f�rs Session Handling

=head2 HTML::Embperl::Req::SetupSession ($req_rec, $Inputfile) [1.3b6+]

Diese Funktion kann von Skripten benutzt werden die in ihrem Verlauf
L<HTML::Embperl::Execute|Execute> aufrufen, jedoch vorher schon auf die Sessiondaten
von Embperl zugreifen wollen.

=over 4

=item $req_rec

Apache request record soweit das Skript unter I<mod_perl> l�uft, ansonsten C<undef>.

=item $Inputfile

Name der Datei die sp�ter von I<Embperl> bearbeitet werden soll. Dient dazu L<%mdat> zu
initialsieren. Wird C<%mdat> nicht ben�tigt, kann dieser Parameter weggelassen werden.

=back

Liefert eine Referenz auf L<%udat> oder, wenn es in einem Arraykontext aufgerufen wird,
eine Referenz auf L<%udat> und L<%mdat> zur�ck. Siehe auch C<CleanupSession>.

=head2 HTML::Embperl::Req::GetSession / $r -> GetSession [1.3b6+]

Liefert eine Referenz auf L<%udat> oder, wenn es in einem Arraykontext aufgerufen wird,
eine Referenz auf L<%udat> und L<%mdat> zur�ck.
Dies Funktion kann benutzt werden um auf die Embperl Sessiondaten aus einem Modul
zuzugreifen, wenn das Session Handling bereits initialisiert ist.
Wenn es als eine Methode aufgerufen wird mu� C<$r> ein C<HTML::Embperl::Req> Objekt sein.
Dieses wird als erster Parameter in @_ an jede Seite �bergeben.

=head2 HTML::Embperl::Req::CleanupSession / $r -> CleanupSession [1.3b6+]

Mu� am Ende B<jedes> Skripts aufgerufen werden, welches C<SetupSession> benutzt, danach aber nicht
L<HTML::Embperl::Execute|Execute> aufruft.
Wenn es als eine Methode aufgerufen wird mu� C<$r> ein C<HTML::Embperl::Req> Objekt sein.
Dieses wird als erster Parameter in @_ an jede Seite �bergeben.

=head2 HTML::Embperl::Req::DeleteSession / $r -> DeleteSession [1.3b6+]

L�scht die Sessiondaten und entfernt den Cookie vom Browser.
Wenn es als eine Methode aufgerufen wird mu� C<$r> ein C<HTML::Embperl::Req> Objekt sein.
Dieses wird als erster Parameter in @_ an jede Seite �bergeben.

=head2 HTML::Embperl::Req::RefreshSession / $r -> RefreshSession [1.3b6+]

St��t das nochmalige senden des Cookies an. Normalerweise wird der Cookie nur beim ersten
Mal gesendet.
Wenn es als eine Methode aufgerufen wird mu� C<$r> ein C<HTML::Embperl::Req> Objekt sein.
Dieses wird als erster Parameter in @_ an jede Seite �bergeben.

=head2 HTML::Embperl::Req::SetSessionCookie / $r -> SetSessionCookie [1.3b7+]

Mu� von Skripts aufgerufen werden, welches C<SetupSession> benutzen, danach aber nicht
L<HTML::Embperl::Execute|Execute> aufrufen, um den Cookie f�r sie Session-Id zu setzen.
Dies wird normalerweise durch L<HTML::Embperl::Execute|Execute> erledigt.
Wenn es als eine Methode aufgerufen wird mu� C<$r> ein C<HTML::Embperl::Req> Objekt sein.
Dieses wird als erster Parameter in @_ an jede Seite �bergeben.


=head1 (Sichere-)Namensr�ume und Opcode Restriktionen


Da die meisten Web Server mehr als ein Dokument verwalten, ist es n�tig,
die Dokumente gegeneinander zu sch�tzen. I<Embperl> benutzt dazu Perl
Namensr�ume (Packages). Standardm��ig f�hrt Embperl jedes
Dokument in seinem eigenen Namensraum aus. Das verhindert, das globale
Variablen, sich gegenseitig �berschreiben oder beeinflussen.
Mittels der Konfigurationsanweisung L<EMBPERL_PACKAGE> ist es m�glich
einen expliziten Packagenamen f�r ein oder mehere Dokumente vorzugeben.
Dies alles verhindert aber nicht, das durch die Angabe eines Variablennamen
incl. Packagenamen eine Embperlseite auf andere Namensr�ume zugreifen kann.


Manchmal, z.B. wenn mehrere Personnen Zugriff auf die Webserverinhalte
haben sollen, ist es notwendig Dokumente tats�chlich gegenseitig zusch�tzen.
F�r solche F�llen kann I<Embperl> I<Safe.pm> nutzen um sichere Namensr�ume
bereit zu stellen. Ein Dokument, das in einem solchen sicheren Namensraum
abl�uft, kann dann nicht mehr auf andere Namensr�ume zugreifen. (F�r weitere
Informationen zu sicheren Namensr�umen lesen Sie bitte die Dokumentation
zu I<Safe.pm>)


Um ein Dokument in einem sicheren Namensraum ablaufen zu lassen, m�ssen
Sie lediglich die Option L<optSafeNamespace> setzen.
Der Packagename wird dabei weiterhin automatisch von I<Embperl> erzeugt
oder kann mittels L<EMBPERL_PACKAGE> gesetzt werden.

B<HINWEIS:> F�r das ausgef�hrte Dokument erscheint es so, als w�rde
der Code im Package B<main> ausgef�hrt!

Eine weitere M�glichkeit, um I<Embperl> Seiten sicher zu machen, ist die
Benutzung von Opcode Restriktionen. Dazu ist es n�tig, zuerst ein
B<Safe Compartment> zu erstellen:


 B<$cp = HTML::Embperl::AddCompartment($name);>

Dies erstellt ein neues Compartment mit einer Default Opcode Maske und dem
Namen $name (Der Name wird sp�ter verwendet, damit Embperl weiss, welches
Compartment es benutzen soll). Nun k�nnen
Sie die Opcode Maske �ndern. Zum Beispiel:

 B<$cp->deny(':base_loop');>

In Ihrer Konfiguration m�ssen Sie die Option L<optOpcodeMask> in
L<EMBPERL_OPTIONS> setzen
und spezifizieren aus welchem Compartment die Opcode Maske (durch setzen von
L<EMBPERL_COMPARTMENT>) genommen werden soll.

Beispiel (beim Gebrauch mit mod_perl):

  B<srm.conf:>

    PerlScript startup.pl

    SetEnv EMBPERL_DEBUG 2285

    Alias /embperl /path/to/embperl/eg

    <Location /embperl/x>
    SetHandler perl-script
    PerlHandler HTML::Embperl
    Options ExecCGI
    PerlSetEnv EMBPERL_OPTIONS 12
    PerlSetEnv EMBPERL_COMPARTMENT test
    </Location>

  B<startup.pl:>

    $cp = HTML::Embperl::AddCompartment('test');
    $cp->deny(':base_loop');


Beim Starten des Server wird dadurch die Datei F<startup.pl> ausgef�hrt.
F<startup.pl> erstellt einen Compartment mit Namen
'test', in dem Schleifen gesperrt sind. Alle Seiten die unter
C</embperl/x> liegen, werden nun in einem sicheren Namensraum, mit
gesperrten Schleifen, ausgef�hrt.

Hinweis: Das Package Name des Compartments wird B<nicht> genutzt!

Mehr Information zum Setzen der Opcode Mask finden Sie in der Dokumentation von Safe.pm und
I<Opcode.pm>.


=head1 Utility Funktionen

=head2 AddCompartment($Name)

F�gt ein Compartment zum Gebrauch mit Embperl hinzu. Embperl nutzt nur
die Opcode Maske und
nicht den Packagenamen des Compartements. C<AddCompartment> gibt den
neu erstellten Compartment zur�ck, so da� die Methoden zum Freigeben oder
Sperren bestimmter Opcodes aufgerufen werden k�nnen.
(siehe auch L<"(Sichere-)Namesr�ume und Opcode Restriktionen">)

Beispiel:

	$cp = HTML::Embperl::AddCompartment('TEST');
	$cp->deny(':base_loop');


=head2 MailFormTo($MailTo, $Subject, $ReturnField)

Sendet den Inhalt des Hashs C<%fdat>, in der durch C<@ffld> angegebenen
Reihenfolge, zur, durch C<$MailTo> angegeben, E-Mail Adresse, mit
C<$Subject> als Betreff. Ist C<$ReturnField> angegeben, wird die in
diesem Feld enthaltene E-Mail Adresse als C<Return-Path> in der
Mail angegeben. C<$ReturnField> sollte normalerweise das Feld angeben
in das der Benutzer seine E-Mail Adresse eintr�gt.



Wenn Sie nachfolgenden Beispielcode als C<Action> in Ihrem Formular angeben:

  <FORM ACTION="x/feedback.htm" METHOD="POST"
        ENCTYPE="application/x-www-form-urlencoded">

wird der Inhalt des Formulars zur angegebenen E-mail Adresse versandt.

L<"EMBPERL_MAILHOST"> gibt den SMTP Server an den C<MailFormTo> benutzt.
Default ist B<localhost>.

Beispiel:

 <HTML>
 <HEAD>
 <TITLE>Feedback</TITLE>
 </HEAD>
 <BODY>
        [- MailFormTo('webmaster@domain.xy',
		      'Mail von WWW Formular', 'email') -]
	Ihre Daten wurden erfolgreich versandt!
 </BODY>
 </HTML>

Das Beispiel sendet eine Mail mit allen Feldinhalten des Formulars
(das Formular mu� als Action die URL des obigen Beispiels angeben)
zu der Mailadresse 'webmaster@domain.xy'. Als Betreff wird
'Mail von WWW Formular' verwendet und der
Return-Path wird auf die Adresse gesetzt, welche im Feld 'email'
eingegeben wurde.

B<HINWEIS:> Sie m�ssen Net::SMTP (aus dem libnet Package) installiert haben,
wenn Sie diese Funktion nutzen wollen.

=head2 exit

C<exit> �berschreibt die standard Perl C<exit> Funktion.
C<exit> beendet die Ausf�hrung des Dokuments und sendet alle bis dahin
ausgef�hrten Ausgaben zum Browser.

B<Hinweis 1:> exit beendet nur die aktuelle Datei. Wurde die Datei von
einer anderen mittels Execute aufgerufen, wird die aufrufende Datei fortgesetzt.

B<Hinweis 2:> Innerhalb eines Perlmoduls, das von einer I<Embperl> Seite
aus aufgerufenen wird, sollten sie C<Apache::exit> verwenden, da das normale
Perl C<exit> ansonsten den kompletten Childproze� beendet. C<Apache::exit>
f�hrt dazu, dass die Ausf�hrung des Moduls, wie auch der I<Embperl> Seite,
abgebrochen wird, jedoch alle Ausgaben noch zum Browser gelangen.


=head1 Ein-/Ausgabefunktionen

=head2 ProxyInput ($r, $in, $mtime, $src, $dest)

Konfiguration in srm.conf:

 <Location /embperl/ifunc>
 SetHandler perl-script
 PerlHandler HTML::Embperl
 Options ExecCGI
 PerlSetEnv EMBPERL_INPUT_FUNC "ProxyInput, /embperl/ifunc, http://otherhost/otherpath"
 </Location>


C<ProxyInput> dient dazu den Quellentext von I<Embperl> Dokumenten, von einer
anderen URL anzufordern, statt sie direkt von der Platte zu lesen.
Im obigen Beispiel w�rde eine Anfrage f�r C</embperl/ifunc/foo.html> z.B.
die URL C<http://otherhost/otherpath/foo.html> als Quelle f�r die Bearbeitung
durch I<Embperl> verwenden.

Eine m�gliche Anwendung ist, die Ausgabe von I<mod_include> durch I<Embperl>
weiter bearbeiten zu lassen.

Beispielkonfiguration in B<srm.conf> f�r B<SSI> und B<Embperl>:

 <Location /embperl>
 SetHandler perl-script
 PerlHandler HTML::Embperl
 Options ExecCGI
 PerlSetEnv EMBPERL_INPUT_FUNC "ProxyInput, /embperl, http://localhost/src"
 </Location>


 <Location /src>
 SetHandler server-parsed
 Options +Includes
 </Location>


Die Quellen m�ssen unter C</src> abgelegt sein. Die eigentliche HTTP Anfrage
wird jedoch an C</embperl> gerichtet.
Eine Anfrage an  C</embperl/foo.html> erzeugt z.B. eine Proxy-Anfrage an
C</src/foo.html>, welche von I<mod_include> ausgef�hrt wird. Die resultierende
Seite wird dann von I<Embperl> weiterverarbeitet.
Es ist ebenfalls m�glich zwei unterschiedliche Ports f�r I<mod_include>
und I<Embperl> zu benutzen, dadurch bleiben die URIs gleich.


=head2 LogOutput ($r, $out, $basepath)

Beispielkonfiguration in srm.conf:

 <Location /embperl/ofunc>
 SetHandler perl-script
 PerlHandler HTML::Embperl
 Options ExecCGI
 PerlSetEnv EMBPERL_OUTPUT_FUNC "LogOutput, /usr/msrc/embperl/test/tmp/log.out"
 </Location>

C<LogOutput> ist eine Ausgabefunktion. Sie sendet die Ausgaben zum Browser
B<und> schreibt sie in einer eindeutige Datei, die den Namen
C<"$basepath.$$.$LogOutputFileno"> bekommt, wobei C<$LogOutputFileno> jedesmal
um eins erh�ht wird.



=head1 Inside Embperl - Wie der Embedded Perl Code intern ausgef�hrt wird


Wenn I<Embperl> auf einen Block mit Perl Code trifft
  B<([+/-/!/$ .... $/!/-/+])>
f�hrt es folgende Bearbeitungsschritte aus:

=over 4

=item 1. Alles, was wie ein HTML Tag aussieht, entfernen.

=item 2. Transformieren HTML/URL kodierter Zeichen in entsprechende ASCII Zeichen.

=item 3. Entfernen aller Carriage Returns.

=item 4. �bersetzen des Perl Codes als eigenst�ndige Funktion.

=item 5. Aufrufen der Funktion.

=item 6. URL/HTML kodieren von entsprechenden Sonderzeichen im R�ckgabewert.

=item 7. Senden des R�ckgabewertes (an Browser oder Datei etc.)

=back

Die Schritte 1-4 werden nur beim ersten Mal, wenn I<Embperl> auf den Perl Code
trifft, ausgef�hrt. Wird die Seite das zweite mal abgerufen, bzw. liegt der Block
in einer Schleife, mu� I<Embperl> lediglich die vorkompilierte Funktion
aufrufen.

Schritte 6 und 7 werden nur bei Ausgaben, d.h. C<[+ ... +]> Bl�cken,
ausgef�hrt.


=head2 Was bedeutet das im Detail?

Als Beispiel nehmen wir folgenden Code:

 [+ <BR>
 $a = "Dies '&gt;' ist ein  Gr��erzeichen"
 <BR> +]

=head2 1. Entfernen der HTML Tags. Danach sieht es folgenderma�en aus:

 [+
 $a = "Dies '&gt;' ist ein  Gr��erzeichen"
 +]

Die <BR>'s in diesem Fall machen keinen Sinn, sie kommen h�chstwahrscheinlich
von einem WYSIWYG HTML Editor, dadurch das der Benutzer zur besseren �bersicht
hier eine neue Zeile beginnen wollte.
Solche Editoren f�gen u.U. auch ungewollte Tags wie C<<FONT>> o.�. in den
Perl Code ein. Durch das entfernen solcher Tags, stellt I<Embperl> sicher,
dass Designer, die mit solchen Editoren arbeiten, den Perl Code dadurch
nicht zerst�ren k�nnen.


Es gibt auch F�lle, wo HTML Tags wirklich gebraucht werden.
Zum Beispiel:
Nehmen wir an, Sie wollen folgendes Ausgeben:

 [+ "<FONT COLOR=$col>" +]

Ohne weitere Ma�nahmen, w�rde I<Embperl> folgendes daraus machen:

 [+ "" +]


Um aber dennoch HTML Tags zu verwenden gibt es verschiedene M�glichkeiten:

=over 4

=item a. <FONT COLOR=[+$col+]>

Schreiben Sie nur den wirklich notwendigen Teil innerhalb des C<[+ ... +]>
Blocks und verlagern sie das HTML Tag nach au�erhalb.
Dies ist der unproblematischste Weg und sollte wenn immer m�glich gew�hlt
werden.

=item b. [+ "\<FONT COLOR=$col>" +]

Durch Voranstellen eines Backslashs ('\').

=item c. [+ "&lt;FONT COLOR=$col&gt;" +]

Sie k�nnen HTML kodierte Zeichen benutzen.
Die meisten HTML Editoren machen dies automatisch.
(In diesem Fall brauchen Sie sich nicht weiter darum zu k�mmern.)

=item d. Die Option C<optRawInput> setzen.

Dies verhindert grunds�tzlich das Entfernen von HTML Tags.

=back

B<HINWEIS:> In den F�llen b-d sollten Sie ebenfalls die Ausgabe-HTML-Kodierung
beachten (siehe unten).

Zu beachten ist ebenfalls, da� I<Embperl> den Perl Dateihandle Operator (<>)
als HTML Tag interpretiert und ihn damit entfernt.

Anstelle von

  [- $line = <STDIN>; -]

sollten Sie eine der folgenden Schreibweise verwenden:


=over 4

=item a. [- $line = \<STDIN>; -]

=item b. [- $line = &lt;STDIN&gt;; -]

=back

Benutzen Sie einen High-Level HTML Editor, wird er wahrscheinlich Version (b)
automatisch erzeugen.


=head2 2. Transformieren HTML/URL kodierter Zeichen in entsprechende ASCII Zeichen.

Da Perl HTML kodierte Zeichen, wie C<$a &lt; $b>, nicht versteht, �bersetzt
I<Embperl> dies zu C<$a < $b>. Nehmen wir das Beispiel
von vorhin, dann sieht es jetzt so aus:

 [+
 $a = "Dies '>' ist ein Gr��erzeichen"
 +]

Dies dient wiederum der Unterst�tzung von High-Level Editoren.
Dadurch ist es unerheblich, wenn Ihr Editor C<&gt;> statt  > im Quellentext
schreibt.

Auch hier ist es manchmal n�tig, die HTML kodierten Zeichen zu erhalten.
Dazu bietet I<Embperl> folgende M�glichkeiten:


=over 4


=item a. \&gt;

Durch Voranstellen eines Backslashs ('\').

=item b. &amp;gt;

Schreiben Sie das erste '&' als HTML kodiertes Zeichen (&amp;).
Ein HTML Editor wird dies von sich machen, wenn Sie C<&gt;> als Text eingeben.

=item c. Die Option C<optRawInput> setzen.

Dies verhindert grunds�tzlich das Dekodieren von HTML kodierten Zeichen.

=back

Da nicht jeder einen High Level oder WYSIWYG HTML Editor benutzt,
gibt es eine Option, um Schritt 1 und 2 vollst�ndig zu sperren.
Durch setzen von L<optRawInput> in L<EMBPERL_OPTIONS> l��t
I<Embperl> den Perl Code unber�hrt. Diese Option sollten Sie setzen,
wenn Sie einen ASCII Editor benutzen, bei Benutzung eines HTML Editors,
sollte diese Option nicht n�tig sein.

Sie k�nnen L<optRawInput> auch innerhalb Ihres Dokument ein-/ausschalten, indem Sie
B<$optRawInput> 1 oder 0 zuweisen, wobei zu beachten ist, da� die �nderung
erst ab dem n�chsten Block wirksam wird. Beispiel:

 [- $optRawInput = 1 -]
 [- $line = <FILEHANDLE> -]



=head2 3. Entfernen Sie aller Carriage Returns

I<Embperl> entfernt vor dem �bersetzen alle Carriage Returns (B<\r>),
um sicherzustellen, da� Programme die unter DOS/Windows erstellt wurden,
auch unter Perl 5.004 und Unix laufen.


=head2 4. �bersetzen des Perl Codes als eigenst�ndige Funktion.

Der n�chste Schritt generiert eine Funktion aus Ihrem Perl Code.
Das obige Beispiel sieht danach wie folgt aus:

sub foo
    {
    $a = "Dies '>' ist ein Gr��erzeichen"
    }

Die Funktion wird vom Perlinterpreter in einem internen vorkompilierten Format
gespeichert und kann
somit sp�ter immer wieder aufgerufen werden, ohne die Schritte 1-4 wiederholen
zu m�ssen. I<Embperl> erkennt, wenn das gleiche Dokument ein zweites mal
angefordert wird und ruft lediglich die
bereits kompilierte Funktion auf. Dadurch wird auch die Ausf�hrung von
dynamischen Tabellen und Schleifen beschleunigt,
da der Perl Code nur bei der ersten Iteration kompiliert werden muss.


=head2 5. Aufrufen der Funktion

Nun kann die Funktion aufgerufen werden, um den Code tats�chlich auszuf�hren.

Falls B<nicht> ein C<[+ ... +]> Block ausgef�hrt wird, ist die Bearbeitung
damit abgeschlossen.


=head2 6. URL/HTML kodieren von entsprechenden Sonderzeichen im R�ckgabewert.

Unser Beispiel erzeugt die Zeichenkette:

 "Dies '>' ist ein Gr��erzeichen"

Das Gr��erzeichen hier ist normaler Text (und nicht das Ende eines HTML Tags),
gem�ss HTML Spezifikation muss es als C<&gt;> zum Browser gesendet werden.
In vielen F�llen entsteht
kein Problem, wenn man direkt das Gr��erzeichen sendet, da der Browser
h�chstwahrscheinlich das '>' als normalen Text ausgeben wird.
In diesem Fall w�re es auch m�glich gleich C<&gt;>
in unseren Perl Code schreiben, wenn jedoch die Zeichenkette z.B. Ergebnis
einer Datenbankabfrage ist und/oder nationale Sonderzeichen enth�lt,
ist es notwendig eine HTML Kodierung der Zeichen durchzuf�hren.


Weiterhin werden Tags, die URLs enthalten (wie C<<A>> oder C<<FRAME>>),
insofern speziell behandelt, als dass Ausgaben innerhalb des Parameters
der die URL enth�lt, URL kodiert werden. (z.B. wird '&' zu C<%26> und
Leerzeichen zu '+'). Dies ist n�tig, damit der Browser Sonderzeichen
korrekt interpretiert.

Beispiel:

   <A HREF="http://host/script?name=[+$n+]">

Falls C<$n> den Wert C<"Mein Name"> enth�lt, wird die resultierende URL:

   http://host/script?name=Mein+Name


In einigen F�llen ist es n�tzlich, die Ausgabekodierung abzuschalten.
Dies kann mit der Variablen L<$escmode> geschehen.

Beispiel: (Um das Beispiel einfacher lesbar zu machen,
setzen wir voraus, da� C<optRawInput> gesetzt ist.
Andernfalls sind die in 1 - 3 beschriebenen Punkte zu beachten)

    [+ "<FONT COLOR=5>" +]

Dies w�rde zum Browser als C<&lt;FONT COLOR=5&gt;> gesandt, was dazu f�hrt
das der Tag exakt so auf dem Bildschirm zusehen ist, statt das sich die
Farbe des folgenden Textes �ndert.


    [+ local $escmode=0 ; "<FONT COLOR=5>" +]

Dies schalten die HTML Kodierung (lokal) ab und das Tag wird exakt so wie
Sie es geschrieben haben zum Browser geschickt.

B<HINWEIS>: C<$escmode> kann nur einmal innerhalb eines C<[+ ... +]> Blocks
gesetzt werden. Der erste Wert der C<$escmode> zugewiesen wird, gilt f�r
B<alle> Ausgaben, innerhalb des Blocks. M�chten Sie C<$escmode> hin- und
herschalten, m�ssen Sie mehrere C<[+ ... +]> Bl�cke verwenden.


=head2 7. Senden des R�ckgabewertes (an Browser oder Datei etc.)

An diesem Punkt ist die Ausgabe fertig aufbereitet und kann zum Browser
gesandt werden. Falls Sie nicht die Option C<optEarlyHttpHeader> gesetzt
haben, werden alle Ausgaben bis zur vollst�ndigen Ausf�hrung des Dokuments
zwischengespeichert. Ist das ganze Dokument abgearbeitet, werden zuerst
alle HTTP Header gesendet (dies erlaubt w�hrend der Erstellung des Dokuments
zus�tzliche HTTP Header hinzuzuf�gen) und anschlie�end der eigentliche
Inhalt. Tritt w�hrend der Verarbeitung ein Fehler auf, wird statt dem
Inhalt eine Fehlerseite zum Browser gesandt.


=head1 Performance

Um die beste Performance von I<Embperl> zu erzielen, ist es notwendig, das Logging auf ein Minimum
zu beschr�nken. Sie k�nnen Embperl drastisch verlangsamen, wenn Sie alle
Logging Option einschalten.
Vorallem sollten Sie B<niemals> L<dbgFlushOutput> oder L<dbgFlushLog>
auf einen Produktionsserver einschalten.
W�hrend der geringf�gige Performanceverlust beim Debuggen nicht auff�llt, kann
er auf einem stark belasteten Server durchaus ins Gewicht fallen.
Auch die Optionen L<optDisableChdir>, L<optDisableHtmlScan>, L<optDisableCleanup>
haben Auswirkungen auf die Performance.

Lesen Sie ebenfalls B<mod_perl_tuning.pod> f�r weitere Ideenen zur
Performancesteigerung.



=head1 Bugs

Fehler sind keine bekannt.

Es wird jedoch empfohlen mindestens Perl 5.004_04 und mod_perl 1.08
einzusetzen, da �ltere Versionen Speicherlecks aufweisen.

=head1 Kompabilit�t

I<Embperl> wurde erfolgreich getestet

=head2 unter Linux 2.x mit

=over 4

=item perl5.004_04

=item perl5.005_03

=item perl 5.6.0

=item perl 5.6.1

=item perl 5.7.1

=item perl 5.7.2

=item perl5.8.0

=item apache_1.3.0 - apache_1.3.27

=item apache_ssl (Ben SSL)

=item Stronghold 2.2

=item Stronghold 2.4.1

=item Apache_1.3.x with mod_ssl 2.x.x

=back

R�ckmeldungen best�tigen, dass es ebenfalls auf fast allen anderen Unix Varianten
problemlos l�uft.

=head2 unter Windows NT/2000 mit

=over 4

=item perl5.004_04

=item perl5.005

=item perl 5.6.0

=item perl 5.6.1

=item perl5.8.0

=item apache_1.3.0 - apache_1.3.27

=back

=head2 unter Windows 95/98 mit

=over 4

=item perl5.004_02 (Binary Distribution, nur Offline Mode)

=item perl5.005_02 + apache_1.3.6


=back

=head1 Support

=head2 R�ckmeldungen/Anregungen/Probleme/Fehlerreports

Diskussionen zu allen Fragen/Problemen rund um I<Embperl> werden auf
der Embperl Mailingliste (embperl@perl.apache.org) gef�hrt. Sollten Sie Probleme mit
I<Embperl> haben, die sich nach der Lekt�re dieser Dokumentation sowie der L<FAQs|"faq_pod">
nicht l�sen lassen, ist die Mailingliste der richtige Ort um nachzufragen.
Oft wurden Probleme schon diskutiert, deshalb lohnt sich ein Blick in
die Archive der Liste.

 http://www.ecos.de/~mailarc/embperl/

oder in das Archiv der mod_perl Mailingliste f�r Fragen in Zusammenhang mit mod_perl

 http://forum.swarthmore.edu/epigone/modperl

Um die Mailingliste zu abbonieren, senden Sie eine Mail an
embperl-subscribe@perl.apache.org, zum von der Liste gestrichen zu werden
gen�gt eine Mail an embperl-unsubscribe@perl.apache.org .

Haben Sie eine Website die Embperl benutzt, w�rde ich mich �ber eine
R�ckmeldung freuen und diese ggf. in die Liste der Sites die Embperl
nutzen ( http://perl.apache.org/embperl/Sites.pod.1.html ) aufnehmen.


=head2 Kommerzieller Support

I<ecos> bietet die M�glichkeit, Support f�r Embperl zu kaufen. Dies umfasst: 

=over 4

=item * Beratung und Unterst�tzung Ihrer Programmierer

=item * Konzeptionierung und Plannung von dynamischen Websites

=item * Erstellung von teilweisen oder kompletten Webangeboten

=item * Beseitigung von Fehler in Embperl (auch f�r mod_perl und Apache)

=item * Implementierung neuer Features

=back

Sie erreichen uns via http://www.ecos.de oder info@ecos.de
F�r weiter Informationen zu unserem Supportangebot, siehe

http://www.ecos.de/x/index.htm/support/r_support.htm


=head2 Wie kann ich die Entwicklung von Embperl unterst�tzen

Wenn Sie I<Embperl> einsetzen und dessen weitere Entwicklung unterst�tzen
m�chten, gibt es zwei M�glichkeiten:

=over 4

=item 1 

Sie implementieren ihr Wunschfeature selbst und senden uns einen Patch.

=item 2

Sie kaufen kommerziellen Support (siehe oben). Auch wenn sie B<vielleicht>
die selben Antworten auf ihre Fragen auf der Mailingliste bekommen w�rden,
macht es Sinn Support zu kaufen. Zum einen k�nnen sie sich dann sicher sein,
B<immer> eine Antwort auf ihre Fragen zu bekommen, zum anderen unterst�tzen
sie damit die weitere Entwicklung von I<Embperl> und erm�glichen uns
mehr Zeit und Resourcen daf�r aufzubringen.

=back


=head1 Links

=head2 Informationen

 mod_perl                           http://perl.apache.org/
 mod_perl FAQ                       http://perl.apache.org/faq
 Embperl                            http://perl.apache.org/embperl/
 Embperl (deutsch)                  http://www.ecos.de/embperl/
 DBIx::Recordset	            ftp://ftp.dev.ecos.de/pub/perl/dbi
 Apache Webserver                   http://www.apache.org/
 ben-ssl (freier httpsd)            http://www.apache-ssl.org/
 mod_ssl (freier httpsd)            http://www.modssl.org/
 stronghold (kommerizieller httpsd) http://www.c2.net/
    Europa                          http://www.eu.c2.net/
 weitere Apache module              http://perl.apache.org/src/apache-modlist.html

=head2 Download

 mod_perl               http://www.perl.com/CPAN/modules/by-module/Apache
 Embperl                ftp://ftp.dev.ecos.de/pub/perl/embperl
 DBIx::Recordset	ftp://ftp.dev.ecos.de/pub/perl/dbi
 
 Win NT/95/98 Binaries
 Apache/perl/
 mod_perl/Embperl	ftp://theoryx5.uwinnipeg.ca/pub/other/ 
    europe              http://www.robert.cz/misc/

 RPM
    source              ftp://ftp.akopia.com/pub/support/srpm/
    binary redhat 6.0   ftp://ftp.akopia.com/pub/support/6.0/
    binary redhat 6.1   ftp://ftp.akopia.com/pub/support/6.1/

 Debian packages        http://www.cse.unsw.edu.au/~gusl/embperl
 
 PPM f�r ActiveState    http://theoryx5.uwinnipeg.ca/ppmpackages/

=head2 CVS

Die aktuelle Entwicklerversion ist via CVS verf�gbar.
Weitere Informationen dazu stehen in L<"perldoc CVS.pod"|CVS/"INTRO">.

=head1 Syntaxmodes f�r verschiedene Editoren

=head2 Emacs

Von: Erik Arneson [erik@mind.net]

Man braucht mmm.el von
http://members.tripod.com/gchen2/xemacs/

Anschlie�end mu� man mein mmm-embperl.el downloaden von
http://www.aarg.net/erik/mmm-embperl.el

Dokumentation ist in den Dateien enthalten.

=head2 VIM

Vim Syntaxfile f�r Vim 5.x & 6.x von Lukas Zapletal mit syntax highliting f�r JavaScript, VBScript,
Perl+Embperl, CSS und HTML, gelbem Hintergrund f�r Perl code (wie M$ Interdev) und
funktionierendem Perl folding:
http://vim.sourceforge.net/scripts/search_results.php?keywords=Embperl

Vim Syntaxfile von Steve Willer: http://www.interlog.com/~willer/embperl.vim

Vim Syntaxfile von Kee Hinckley: http://www.somewhere.com/software/

=head2 Dreamweaver

Dreamweaverextention welche Dreamweaver veranlasst den Embperl code in Ruhe zu lassen
befindet sich unter http://www.somewhere.com/software/


=head1 Author

G. Richter (richter@dev.ecos.de)