File: perldata.1

package info (click to toggle)
manpages-pl 20050320-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 12,200 kB
  • ctags: 16
  • sloc: makefile: 1,454; perl: 477; sh: 316
file content (905 lines) | stat: -rw-r--r-- 34,940 bytes parent folder | download | duplicates (3)
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
.\" {PTM/WK/0.1/IX-1999}
.rn '' }`
''' $RCSfile: perldata.1,v $$Revision: 1.4 $$Date: 2002/05/21 09:29:19 $
'''
''' $Log: perldata.1,v $
''' Revision 1.4  2002/05/21 09:29:19  robert
''' za wyjtkiem --> z wyjtkiem
''' i inne poprawki
'''
''' Revision 1.3  2000/10/22 16:15:28  wojtek2
''' wiodce (spacje, zera etc.)->pocztkowe
''' kontrolne (znaki, sekwencje)->sterujce
''' take "klawisze kontrolne" (Ctrl+klaw.)->klawisze sterujce
'''
''' Revision 1.2  1999/09/11 15:19:00  pborys
''' hypertekstualizacja
'''
''' Revision 1.1  1999/09/07 15:01:02  wojtek2
''' perldata.1: typy danych w perlu
'''
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH PERLDATA 1 "perl 5.005, patch 02" "24 lipca 1998" "Podrcznik programisty Perla"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH NAZWA
perldata \- typy danych Perla
.SH "OPIS"
.Sh "Nazwy zmiennych"
Perl posiada trzy typy struktur danych: skalary, tablice skalarw oraz
asocjacyjne tablice skalarw, zwane te "haszami" (\*(L"hashes\*(R").
Zwyke tablice indeksowane s liczbami, poczwszy od 0 (indeksy ujemne s
liczone od koca tablicy). Tablice asocjacyjne indeksowane s acuchami.
.PP
Wartoci s zwykle przypisane do nazwy (lub nazwanego odwoania).
.\" Values are usually referred to by name (or through a named reference).
Pierwszy znak nazwy mwi o tym, do jakiego rodzaju struktury danych si ona
odnosi. Reszta nazwy okrela konkretn warto, do ktrej odnosi si nazwa.
Najczciej skada si ona z pojedynczego \fIidentyfikatora\fR, to znaczy,
acucha rozpoczynajcego si liter lub znakiem podkrelenia i zawierajcego
litery, podkrelenia i cyfry. W niektrych przypadkach moe by cigiem
identyfikatorw, rozdzielonych przez \f(CW::\fR (lub przez \f(CW'\fR, ale
nie jest to polecane). Wszystkie oprcz ostatniego interpretowane s jako nazwy
pakietw, wskazujc przestrzenie nazw, w ktrych bdzie wyszukiwany ostatni
identyfikator (szczegy znajdziesz w sekcji \f(CWPackages\fR podrcznika
\fIperlmod\fR(1)).
Moliwe jest zastpienie prostego identyfikatora wyraeniem, ktre w czasie
wykonania tworzy odwoanie do wartoci; jest to opisane szczegowo poniej
oraz na stronie \fIperlref\fR(1) podrcznika.
.PP
Istniej rwnie zmienne specjalne, ktrych nazwy nie przestrzegaj powyszych
regu, po to by nie kolidoway przypadkowo z ktr z twych zwykych zmiennych.
acuchy, ktre pasuj do objtych nawiasami okrgymi czci wyraenia
regularnego zachowywane s pod nazwami zawierajcymi tylko cyfry po znaku
\f(CW$\fR (patrz strony \fIperlop\fR(1) i \fIperlre\fR(1) dokumentacji).
Dodatkowo, kilka zmiennych specjalnych, umoliwiajcych dostp do wewntrznych
rozwiza Perla, posiada nazwy zawierajce znaki przestankowe
(zobacz strony \fIperlvar\fR(1) dokumentacji).
.PP
Wartoci skalarne zawsze nosz nazwy rozpoczynajce si znakiem \*(L'$\*(R',
nawet, gdy odnosz si do skalara bdcego czci tablicy. Dziaa to podobnie jak
angielski przedimek \*(L"the\*(R".
A zatem mamy:
.PP
.Vb 4
\&    $dni             # zwyka warto skalarna "dni"
\&    $dni[28]         # 29-ty element tablicy
\&    $dni{'luty'}     # warto dla klucza 'luty' z hasza %dni
\&    $#dni            # ostatni indeks tablicy @dni
.Ve
ale cae tablice lub wycinki tablic oznaczane s przez \*(L'@\*(R',
co dziaa jak angielskie sowo \*(L"these\*(R" lub \*(L"those":
.PP
.Vb 3
\&    @dni             # ($dni[0], $dni[1],... $dni[n])
\&    @dni[3,4,5]      # to samo, co @dni[3..5]
\&    @dni{'a','c'}    # to samo, co ($dni{'a'},$dni{'c'})
.Ve
za cae tablice asocjacyjne (hasze) oznaczane s przez \*(L'%':
.PP
.Vb 1
\&    %dni             # (klucz1, warto1, klucz2, warto2 ...)
.Ve
Dodatkowo, procedury nazywane s z uyciem pocztkowego \*(L'&\*(R', cho jest
to opcjonalne, jeli nie jest dwuznaczne
(tak jak w jzyku angielskim czsto zbyteczne jest uycie sowa\*(L"do\*(R").
Elementy tablicy symboli mog by nazywane z uyciem pocztkowego \*(L'*\*(R',
ale na razie nie musisz si tym zajmowa.
.PP
Kady typ zmiennych ma swoj wasn przestrze nazw. Moesz, bez obawy
o konflikt, uywa tej samej nazwy dla zmiennej skalarnej, tablicy czy
tablicy asocjacyjnej (lub uchwytu pliku, nazwy procedury czy etykiety).
Oznacza to, e \f(CW$foo\fR i \f(CW@foo\fR s dwoma rnymi
zmiennymi. Znaczy to te, e \f(CW$foo[1]\fR jest czci tablicy \f(CW@foo\fR,
nie za czci skalara \f(CW$foo\fR. Moe si to wydawa troch dziwne, ale
tak ma by, gdy to jest dziwne.
.\" seem a bit weird, but that's okay, because it is weird.
.PP
Poniewa odniesienia do zmiennych i tablic zawsze rozpoczynaj si od
\*(L'$\*(R', \*(L'@\*(R' lub \*(L'%\*(R', to sowa \*(L"zarezerwowane\*(R"
nie s naprawd zarezerwowane w odniesieniu do nazw zmiennych.
(Jednak \s-1S\s0 one zarezerwowane w odniesieniu do etykiet i uchwytw plikw,
ktre nie posiadaj specjalnego pocztkowego znaku. Nie moesz, na przykad,
uy uchwytu pliku o nazwie \*(L"log\*(R". Wskazwka: moesz napisa
\f(CWopen(LOG,'logfile')\fR zamiast \f(CWopen(log,'logfile')\fR.  
Uycie nazw uchwytw plikw zoonych z duych liter poprawia rwnie
czytelno i chroni przed konfliktami z przyszymi sowami zastrzeonymi.
Wielko liter JEST znaczca\*(--"\s-1FOO\s0\*(R", \*(L"Foo\*(R"
oraz \*(L"foo\*(R" s zupenie innymi nazwami. Nazwy rozpoczynajce si
liter lub znakiem podkrelenia mog zawiera rwnie cyfry i podkrelenia.
.PP
Moliwe jest zastpienie takiej alfanumerycznej nazwy wyraeniem, ktre
zwraca odwoanie do obiektu danego typu. Opis tego znajdziesz na stronie
\fIperlref\fR(1) podrcznika.
.PP
Nazwy rozpoczynajce si cyfr mog zawiera tylko cyfry. Nazwy, ktre nie
zaczynaj si od litery, podkrelenia ani cyfry ograniczone s do pojedynczego
znaku, np. \f(CW$%\fR czy \f(CW$$\fR. (Wikszo z tych jednoznakowych nazw
ma predefiniowane znaczenie dla Perla. Na przykad, \f(CW$$\fR jest
identyfikatorem biecego procesu.)
.Sh "Kontekst"
Interpretacja operacji i wartoci w Perlu zaley czasami od wymaga kontekstu,
w jakim uyta jest operacja czy warto. Istniej dwa gwne konteksty:
skalarny i listowy. Niektre z operacji zwracaj wartoci listowe w kontekcie
oczekujcym listy, za wartoci skalarne w przeciwnym przypadku.
(Jeli tak jest dla danej operacji, to zostanie to wspomniane w jej opisie.)
Innymi sowy, Perl przecia pewne operacje w oparciu o to, czy spodziewana
jest pojedyncza warto czy mnoga. (W podobny sposb funkcjonuj w jzyku
angielskim niektre sowa, jak \*(L"fish\*(R" czy \*(L"sheep\*(R".)
.PP
Na zasadzie wzajemnoci,
.\" In a reciprocal fashion,
operacja dostarcza albo kontekstu skalarnego albo
listowego kademu ze swych argumentw. Na przykad, jeli napiszesz
.PP
.Vb 1
\&    int( <STDIN> )
.Ve
to operacja cakowita (integer) dostarcza kontekst skalarny dla operatora
<\s-1STDIN\s0>, ktry odpowiada czytajc jeden wiersz z \s-1STDIN\s0
i przesyajc go z powrotem do operacji integer. Ta z kolei znajduje
warto typu integer tego wiersza i zwraca j. Jeeli, z drugiej strony,
napiszesz
.PP
.Vb 1
\&    sort( <STDIN> )
.Ve
To operacja sortowania dostarcza kontekstu listowego dla <\s-1STDIN\s0>,
ktry bdzie przetwarza wszystkie dostpne wiersze a do koca pliku.
Nastpnie przele list tych wierszy z powrotem do procedury sortowania,
ktra z kolei posortuje dostarczone wiersze i zwrci je w postaci listy
do kontekstu w jakim wywoano sort.
.PP
Przypisanie jest troch specyficzne, w tym, i posuguje si swym lewym
argumentem do ustalenia kontekstu dla prawego argumentu. Przypisanie do
skalara oblicza praw stron w kontekcie skalarnym, podczas gdy przypisanie
do tablicy lub wycinka tablicy rozwija praw stron w kontekcie listowym.
Przypisanie do listy rwnie oblicza praw stron w kontekcie listowym.
.PP
Procedury definiowane przez uytkownika mog sprawdza, czy s wywoane
w kontekcie skalarnym czy listowym, ale wikszo z nich nie dba o to, gdy
skalary s automatycznie interpolowane w listy. Zobacz opis funkcji
\f(CWwantarray\fR na stronie \fIperlfunc\fR(1).
.Sh "Wartoci skalarne"
Wszystkie dane w Perlu s skalarami lub tablicami skalarw albo haszami
skalarw. Zmienne skalarne mog zawiera rne rodzaje pojedynczych danych,
jak liczby, acuchy znakowe czy odwoania. Oglnie, konwersja z jednej postaci
na drug jest transparentna. (Skalar nie moe zawiera wielu wartoci, ale moe
zawiera odwoanie do tablicy czy hasza zawierajcych wiele wartoci.)
Z powodu automatycznej konwersji skalarw, operatory i funkcje zwracajce
skalary nie musz dba o to (i faktycznie nie dbaj), czy kontekst oczekuje
acucha czy te liczby.
.PP
Skalary nie s koniecznie t czy inn rzecz. Nie ma moliwoci zadeklarowania
zmiennej skalarnej o typie \*(L"string\*(R", \*(L"number\*(R", typu
\*(L"filehandle\*(R", czy jakiego innego. Perl jest jzykiem kontekstowo
polimorficznym, w ktrym skalary mog by acuchami, liczbami czy odwoaniami
(co obejmuje obiekty). acuchy i liczby uwaane s za mniejwicej to samo
w niemal kadym zastosowaniu. Odwoania s jednak nierzutowalnymi wskanikami
o cile okrelonym typie, z wbudowanym licznikiem odwoa i wywoaniami
destruktora.
.PP
Warto skalarna interpretowana jest jako prawda, \s-1TRUE\s0, w sensie
logiki boolowskiej, jeli nie jest acuchem pustym ani liczb zero (lub jej
acuchowym rwnowanikiem, \*(L"0"). Kontekst boolowski (logiczny) jest
po prostu specyficznym rodzajem kontekstu skalarnego.
.PP
Faktycznie istniej dwie odmiany skalarw pustych: zdefiniowane
i niezdefiniowane. Niezdefiniowane skalary puste zwracane s gdy brak jest
rzeczywistej wartoci czego, jak w przypadku wystpienia bdu lub na kocu
pliku, albo gdy odwoujesz si do niezdefiniowanej zmiennej czy elementu
tablicy. Niezdefiniowany pusty skalar moe sta si zdefiniowany po tym, jak
po raz pierwszy uyjesz go tak, jakby by zdefiniowany. Ale przed tym moesz
posuy si operatorem \fIdefined()\fR, by stwierdzi, czy warto jest
zdefiniowana czy te nie.
.PP
By stwierdzi, czy dany acuch jest poprawn liczb niezerow wystarczy
zwykle porwna go zarwno z numerycznym 0 jak i leksykalnym  \*(L"0\*(R"
(cho spowoduje to ostrzeenia opcji \fB\-w\fR). Sposb ten wynika std, e
acuchy nie bdce liczbami uwaane s za 0, tak jak w \fBawk\fR:
.PP
.Vb 3
\&    if ($str == 0 && $str ne "0")  {
\&        warn "To nie wyglda na liczb";
\&    }
.Ve
Zwykle jest to metoda preferowana, gdy w przeciwnym razie nie traktowaby
poprawnie notacji \s-1IEEE\s0, takich jak \f(CWNaN\fR czy \f(CWInfinity\fR.
Czasami bdziesz wola
.\" At other times you might prefer to
posuy si funkcj \s-1POSIX::\s0strtod czy wyraeniem regularnym
do sprawdzenia, czy dana jest numeryczna. Dokadny opis wyrae regularnych
znajdziesz w podrczniku \fIperlre\fR.
.PP
.Vb 8
\&    warn "has nondigits"        if     /\eD/;
\&    warn "not a natural number" unless /^\ed+$/;              # odrzuca -3
\&    warn "not an integer"       unless /^-?\ed+$/;            # odrzuca +3
\&    warn "not an integer"       unless /^[+-]?\ed+$/;
\&    warn "not a decimal number" unless /^-?\ed+\e.?\ed*$/;    # odrzuca .2
\&    warn "not a decimal number" unless /^-?(?:\ed+(?:\e.\ed*)?|\e.\ed+)$/;
\&    warn "not a C float"
\&        unless /^([+-]?)(?=\ed|\e.\ed)\ed*(\e.\ed*)?([Ee]([+-]?\ed+))?$/;
.Ve
Dugo tablicy jest wartoci skalarn. Moesz uzyska dugo tablicy
\f(CW@dni\fR obliczajc \f(CW$#dni\fR, tak jak w \fBcsh\fR. 
(Faktycznie, nie jest to dugo tablicy, a indeks ostatniego elementu, gdy
(zwykle) istnieje element o indeksie zerowym.) Przypisanie do \f(CW$#dni\fR
zmienia dugo tablicy. Skracanie t metod tablicy niszczy wartoci
pozostae za nowym kocem tablicy. Wyduenie uprzednio skrconej tablicy
JU NIE odtwarza wartoci, ktre byy w utraconych
elementach. (Byo tak w Perlu 4, ale musielimy z tym skoczy, by zapewni
wywoywanie destruktorw tam, gdzie jest to oczekiwane.)
Moesz te osign nieco lepsz efektywno wstpnie poszerzajc tablic,
ktra ma si powikszy. (Mona take poszerza tablic wykonujc przypisanie
do elementu, ktry jest poza jej obecnym kocem.) Tablic mona obci
do zera przez przypisanie do niej pustej listy (). Ponisze s rwnowane:
.PP
.Vb 2
\&    @cokolwiek = ();
\&    $#cokolwiek = -1;
.Ve
Jeeli przetwarzasz nazwan tablic w kontekcie skalarnym, to zwraca on
dugo tablicy. (Zauwa, e nie jest to prawd dla list, ktre zwracaj
ostatni warto, tak jak operator przecinka w C. Nie jest to te prawd
dla funkcji wbudowanych, zwracajcych to, na co maj ochot.)
Ponisze jest zawsze prawdziwe:
.PP
.Vb 1
\&    scalar(@cokolwiek) == $#cokolwiek - $[ + 1;
.Ve
[Zmienna specjalna $[ okrela indeks pierwszego elementu w tablicy
i pierwszego znaku w acuchu, domylnie jest to zero.]
W wersji 5 Perla zmieniono semantyk \f(CW$[\fR: pliki nie ustawiajce wartoci
\f(CW$[\fR nie musz ju zwaa na to, czy inny plik zmieni jej warto.
Inaczej mwic, nie zaleca si uywania \f(CW$[\fR.
Zatem oglnie moesz zakada, e
.PP
.Vb 1
\&    scalar(@cokolwiek) == $#cokolwiek + 1;
.Ve
Niektrzy programici wybieraj uycie jawnej konwersji, by nie byo
adnych wtpliwoci:
.PP
.Vb 1
\&    $liczba_elementow = scalar(@cokolwiek);
.Ve
Jeeli posugujesz si haszem (tablic asocjacyjn) w kontekcie skalarnym,
to zwraca on warto, ktra jest prawd wtedy i tylko wtedy, gdy hasz zawiera
jakkolwiek par klucz/warto. (Jeeli s takie pary, to warto zwracana
jest acuchem skadajcym si z liczby uytych jednostek komrek (buckets)
oraz liczby zaalokowanych jednostek komrek, rozdzielonych ukonikiem.
Najbardziej przydaje si to do sprawdzania, czy wkompilowany w Perl
algorytm haszowania dziaa kiepsko na twoim zestawie danych. Na przykad,
wrzucasz 10,000 elementw do hasza, ale przetworzenie \f(CW%HASH\fR
w kontekcie skalarnym zwraca \*(L"1/16\*(R", co oznacza, e tylko jedna
z szesnastu komrek zostaa uyta, i przypuszczalnie zawiera wszystkie twoje
10,000 pozycji. To si nie powinno zdarzy.)
.PP
Moesz wstpnie przydzieli miejsce na hasz przy pomocy przypisania do funkcji
\fIkeys()\fR. Zaokrgli to zaalokowane jednostki komrek do najbliszej
potgi dwjki.
.PP
.Vb 1
\&    keys(%users) = 1000;                # zaalokuj 1024 buckets
.Ve
.Sh "Konstruktory wartoci skalarnych"
Literay numeryczne podawane s w zwyczajowych formatach zmiennoprzecinkowych
lub cakowitych:
.PP
.Vb 6
\&    12345
\&    12345.67
\&    .23E-10
\&    0xffff           # hex
\&    0377             # semkowa
\&    4_294_967_296    # podkrelenie dla lepszej czytelnoci
.Ve
Literay acuchowe ograniczone s zwykle przez pojedyncze lub podwjne
cudzysowy. Dziaaj one bardzo podobnie do znakw cytowania powoki:
w literaach acuchowych w cudzysowach zachodzi zastpowanie zmiennych
i interpretacja odwrotnego ukonika. W acuchach w apostrofach nie wystpuje
zastpowanie i interpretacja (z wyjtkiem \*(L"\f(CW\e'\fR\*(R" oraz
\*(L"\f(CW\e\e\fR"). To tworzenia znakw takich jak nowa linia, tabulator itd.,
stosowane s zarwno zwyke reguy uycia odwrotnego ukonika w Unixie, jak
i bardziej egzotyczne formy. List sposobw cytowania znajdziesz w sekcji
\fIQuote and Quotelike Operators\fR podrcznika \fIperlop\fR(1).
.PP
Zapisy semkowe czy szesnastkowe w literaach acuchowych (np. \*(L'0xffff')
nie s automatycznie zamieniane na ich cakowit reprezentacj. Konwersje te
wykonuj funkcje \fIhex()\fR i \fIoct()\fR. Wicej szczegw znajdziesz
w opisach tych funkcji w podrczniku \fIperlfunc\fR(1).
.PP
Moesz te umieszcza znaki nowej linii bezporednio w acuchach, tj., mog
one koczy si w innym wierszu ni si rozpoczy. Jest to przyjemne, ale
jeeli zapomnisz zamykajcego cudzysowu, to bd nie bdzie zgaszany dopty,
dopki Perl nie znajdzie innego wiersza, zawierajcego znak cudzysowu, ktry
moe znajdowa si o wiele dalej w skrypcie. Zastpowanie zmiennych
w acuchach ograniczone jest do zmiennych skalarnych, tablic oraz wycinkw
tablic. (Inaczej mwic, nazw rozpoczynajcych si od $ lub @, po ktrych
moe opcjonalnie wystpi, ujte w nawiasy kwadratowe, wyraenie traktowane
jako indeks elementu tablicy.)
Poniszy fragment kodu drukuje \*(L"Cena wynosi $\&100.\*(R"
.PP
.Vb 2
\&    $cena = '$100';    # nie interpretowane
\&    print "Cena wynosi $cena.\en";     # interpretowane
.Ve
Tak jak w niektrych powokach, moesz umieci nazw w nawiasach klamrowych,
by oddzieli j od nastpujcych dalej znakw alfanumerycznych.
Identyfikator w takich nawiasach traktowany jest zawsze jako acuch, tak samo
jak pojedynczy identyfikator bdcy indeksem hasza. Nasz wczeniejszy przykad,
.PP
.Vb 1
\&    $dni{'luty'}
.Ve
moe by zapisany jako
.PP
.Vb 1
\&    $dni{luty}
.Ve
a cudzysowy bd domniemane automatycznie. Ale cokolwiek bardziej
skomplikowanego w indeksie zostanie zinterpretowane jako wyraenie.
.PP
Zauwa, e acuch w pojedynczych cudzysowach musi by oddzielony od
poprzedzajcego go sowa odstpem, gdy pojedynczy cudzysw jest poprawnym
(cho nie zalecanym) znakiem w nazwie zmiennej (zobacz \f(CWPackages\fR
w podrczniku \fIperlmod\fR(1)).
.PP
Trzema specjalnymi literaami s _\|_FILE_\|_, _\|_LINE_\|_
oraz _\|_PACKAGE_\|_, ktre reprezentuj nazw biecego pliku, numer wiersza
oraz nazw pakietu w danym punkcie twego programu. Mog by uywane wycznie
jako odrbne tokeny. Nie bd one interpolowane wewntrz acuchw.
Jeeli nie ma biecego pakietu (z powodu pustej dyrektywy \f(CWpackage;\fR),
to _\|_PACKAGE_\|_ jest wartoci niezdefiniowan.
.PP
Tokenami _\|_END_\|_ i _\|_DATA_\|_ mona posugiwa si do wskazania
logicznego koca skryptu przed faktycznym kocem pliku. Dowolny nastpujcy
po nich tekst jest ignorowany, ale moe by odczytany przy pomocy uchwytu
\s-1DATA\s0. Wykorzystaj main::\s-1DATA\s0 dla uytego tokenu _\|_END_\|_,
lub te \s-1NAZWAPAKIETU::DATA\s0 (gdzie \s-1NAZWAPAKIETU\s0 jest biecym
pakietem) dla _\|_DATA_\|_.
Dwa znaki sterujce: ^D i ^Z s synonimami dla _\|_END_\|_ (lub _\|_DATA_\|_
w module). Szerszy opis _\|_DATA_\|_ i przykad uycia znajdziesz w podrczniku
\fISelfLoader\fR.
Zauwa, e nie mona czyta z uchwytu pliku \s-1DATA\s0 w bloku \s-1BEGIN\s0.
Blok ten jest wykonywany natychmiast po napotkaniu (w czasie kompilacji).
W tym momencie nie zosta jeszcze znaleziony odpowiedni token _\|_DATA_\|_
(lub _\|_END_\|_).
.PP
Sowo nie posiadajce adnej innej interpretacji w gramatyce Perla
bdzie traktowane tak, jakby znajdowao si w cudzysowie. S one znane pod
nazw "goych sw" (\*(L"barewords\*(R").
Tak samo, jak w przypadku etykiet i uchwytw plikw, goe sowa skadajce si
wycznie z maych liter naraaj na konlikt z przyszymi sowami zastrzeonymi.
Jeeli uyjesz przecznika \fB\-w\fR, to Perl bdzie ostrzega o wystpieniu
takich sw.
Niektrzy chcieliby cakowicie wyj spod prawa goe sowa.
Jeli napiszesz
.PP
.Vb 1
\&    use strict 'subs';
.Ve
to kade goe sowo, ktre nie zostanie zinterpretowane jako wywoanie
procedury spowoduje bd kompilacji. Ograniczenie to rozciga si do koca
zawierajcego je bloku. Blok wewntrzny moe je jednak zanegowa przy pomocy
\f(CWno strict 'subs'\fR.
.PP
Zmienne tablicowe w acuchach objtych cudzysowami interpolowane s
przez zczenie wszystkich elementw tablicy. Elementy s wwczas rozdzielone
ogranicznikiem podanym w zmiennej \f(CW$"\fR (\f(CW$LIST_SEPARATOR\fR w module
English), domylnie spacj. Ponisze fragmenty s rwnowane:
.PP
.Vb 2
\&    $temp = join($",@ARGV);
\&    system "echo $temp";
.Ve
.Vb 1
\&    system "echo @ARGV";
.Ve
Wewntrz wzorcw wyszukiwania (ktre rwnie podlegaj zastpowaniu w podwjnym
cytowaniu) pojawia si brzydka niejednoznaczno: czy \f(CW/$foo[bar]/\fR
ma by interpretowane jako \f(CW/${foo}[bar]/\fR (gdzie \f(CW[bar]\fR jest
klas znakw wyraenia regularnego) czy te jako \f(CW/${foo[bar]}/\fR (gdzie
\f(CW[bar]\fR jest indeksem tablicy \f(CW@foo\fR)? Jeeli nie istnieje
\f(CW@foo\fR, to jest to oczywicie klasa znakw. Jeeli \f(CW@foo\fR istnieje,
to Perl odgaduje czym ma by \f(CW[bar]\fR, i prawie zawsze ma racj.
Jeli odgaduje le, albo po prostu jeste paranoikiem, moesz wymusi poprawn
interpretacj uywajc nawiasw klamrowych jak powyej.
.PP
Wierszowa forma cytowania oparta jest na skadni "dokumentw-tutaj" uywanej
(\*(L"here-doc\*(R") w powokach. Po sekwencji \f(CW<<\fR podajesz napis
ograniczajcy cytowany materia, a wszystkie wiersze poniej biecego a do
napisu koczcego s wartoci elementu. Napisem koczcym moe by
identyfikator (sowo) albo jaki cytowany tekst. Jeeli jest to tekst
cytowany, to rodzaj zastosowanych znakw cytowania okrela traktowanie tekstu,
tak jak przy zwykym cytowaniu. Niecytowany identyfikator dziaa tak, jakby
by w podwjnym cudzysowie. Pomidzy \f(CW<<\fR a identyfikatorem nie moe
wystpi spacja. (Jeeli wstawisz spacj, to bdzie ona traktowany jak pusty
identyfikator, co jest poprawne i dopasowuje pierwszy pusty wiersz.) Napis
koczcy musi pojawi si w wierszu koczcym samotnie (niecytowany i bez
otaczajcych biaych znakw).
.PP
.Vb 3
\&        print <<EOF;
\&    Cena wynosi $cena.
\&    EOF
.Ve
.Vb 3
\&        print <<"EOF";  # to samo, co powyej
\&    Cena wynosi $cena.
\&    EOF
.Ve
.Vb 4
\&        print <<`EOC`;  # wykonaj polecenia
\&    echo hi there
\&    echo lo there
\&    EOC
.Ve
.Vb 5
\&        print <<"foo", <<"bar"; # moesz skadowa, jeden za drugim
\&    I said foo.
\&    foo
\&    I said bar.
\&    bar
.Ve
.Vb 6
\&        myfunc(<<"TO", 23, <<'TAMTO');
\&    Masz tu linijk
\&    czy dwie.
\&    TO
\&    a tu jeszcze jedn.
\&    TAMTO
.Ve
Nie zapomnij tylko, e musisz postawi rednik na kocu instrukcji.
Perl nie wie przecie, czy nie zamierzasz sprbowa zrobi tego:
.PP
.Vb 4
\&        print <<ABC
\&    179231
\&    ABC
\&        + 20;
.Ve
.Sh "Konstruktory wartoci listowych"
Wartoci listowe oznaczane s przez oddzielenie pojedynczych wartoci
przecinkami (i otoczenie listy nawiasami jeli wymaga tego kolejno):
.PP
.Vb 1
\&    (LIST)
.Ve
W kontekcie nie wymagajcym wartoci listowej warto literau listowego jest
wartoci ostatniego elementu, tak jak w przypadku wystpujcego w C operatora
przecinkowego.
Na przykad,
.PP
.Vb 1
\&    @foo = ('cc', '-E', $bar);
.Ve
przypisuje warto caej listy do tablicy foo, ale
.PP
.Vb 1
\&    $foo = ('cc', '-E', $bar);
.Ve
przypisuje zmiennej foo warto zmiennej bar. Zauwa, e rzeczywista tablica
w kontekcie skalarnym zwraca dugo tablicy. Poniszy kod przypisuje
\f(CW$foo\fR warto 3:
.PP
.Vb 2
\&    @foo = ('cc', '-E', $bar);
\&    $foo = @foo;                # $foo dostaje 3
.Ve
Przed nawiasem zamykajcym list literaw moesz uy opcjonalnego przecinka,
zatem moesz pisa:
.PP
.Vb 5
\&    @foo = (
\&        1,
\&        2,
\&        3,
\&    );
.Ve
LISTY dokonuj automatycznej interpolacji podlist. To znaczy, kiedy
przetwarzana jest \s-1LISTA\s0, to kady jej element jest przetwarzany
w kontekcie listowym. Wynikowa warto listy interpolowana jest do listy
\s-1LISTA\s0 tak, jakby kady pojedynczy element by czonkiem \s-1LISTY\s0
Zatem w \s-1LICIE\s0 trac swoj tosamo tablice i hasze--lista
.PP
.Vb 1
\&    (@foo,@bar,&SomeSub,%glarch)
.Ve
zawiera wszystkie elementy \f(CW@foo\fR, po ktrych nastpuj wszystkie
elementy \f(CW@bar\fR, wszystkie elementy zwrcone przez procedur o nazwie
SomeSub wywoan w kontekcie listowym, i na kocu pary klucz/warto
z \f(CW%glarch\fR. Jeeli chcesz odwoa si do listy, NIE
wykonujc interpolacji zajrzyj do podrcznika \fIperlref\fR(1).
.PP
Lista pusta reprezentowana jest przez (). Jej interpolowanie w licie nie daje
adnego efektu. Zatem ((),(),()) jest rwnowane (). Podobnie, interpolowanie
tablicy bez elementw jest tym samym, co nie interpolowanie w tym miejscu
adnej tablicy.
.PP
Warto listowa moe by te indeksowana tak, jak zwyka tablica. Musisz tylko
umieci list w nawiasach, by unikn niejasnoci. Na przykad:
.PP
.Vb 2
\&    # Stat zwraca warto listow
\&    $time = (stat($file))[8];
.Ve
.Vb 2
\&    # TUTAJ BD SKADNI
\&    $time = stat($file)[8];  # Oj, zapomniaem nawiasw
.Ve
.Vb 2
\&    # znajd cyfr szesnastkow
\&    $hexdigit = ('a','b','c','d','e','f')[$digit-10];
.Ve
.Vb 2
\&    # "reverse comma operator"
\&    return (pop(@foo),pop(@foo))[0];
.Ve
W licie moesz wykona przypisanie do \f(CWundef\fR. Przydaje si to do
pozbywania si niektrych wartoci zwracanych przez funkcj:
.PP
.Vb 1
\&    ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
.Ve
Do list mona wykona przypisanie wtedy i tylko wtedy, gdy dozwolone jest
przypisanie do kadego z elementw listy:
.PP
.Vb 1
\&    ($a, $b, $c) = (1, 2, 3);
.Ve
.Vb 1
\&    ($map{'czerwony'}, $map{'niebieski'}, $map{'zielony'}) 
\&                                              = (0x00f, 0x0f0, 0xf00);
.Ve
Przypisanie tablicy w kontekcie skalarnym zwraca liczb elementw utworzonych
przez wyraenie po prawej stronie przypisania:
.PP
.Vb 2
\&    $x = (($foo,$bar) = (3,2,1));  # ustaw $x na 3, nie 2
\&    $x = (($foo,$bar) = f()); # ustaw $x na ilo zwrconych przez f()
.Ve
Jest to bardzo wygodne, gdy chcesz wykona przypisanie listy w kontekcie
logicznym (boolowskim), gdy wikszo funkcji listowych zwraca po zakoczeniu
przetwarzania list pust, co przy przypisaniu daje 0, interpretowane jako
fasz.
.PP
Ostatni element moe by tablic lub haszem:
.PP
.Vb 2
\&    ($a, $b, @rest) = split;
\&    my($a, $b, %rest) = @_;
.Ve
Faktycznie moesz umieci tablic lub hasza w dowolnym miejscu listy, ale
pierwsze z nich na licie wessie wszystkie wartoci i pozostae dostan
warto nul. Moe to by pomocne w \fIlocal()\fR lub \fImy()\fR.
.PP
Litera hasza (tablicy asocjacyjnej) zawiera pary wartoci, ktre bd
interpretowane jako klucz i warto:
.PP
.Vb 2
\&    # takie samo przypisanie jak powyej
\&    %map = ('czerwony',0x00f,'niebieski',0x0f0,'zielony',0xf00);
.Ve
Cho listy literaw i nazwane tablice s zwykle wzajemnie wymienne, to nie
zachodzi to w przypadku haszy. To, e moesz indeksowa wartoci listy
tak jak zwykej tablicy nie oznacza, e moesz indeksowa list tak jak hasz.
Podobnie, hasze wczone jako czci innych list (cznie z listami parametrw
i list zwracanych przez funkcje) zawsze ulegaj spaszczeniu do par
klucz/warto. Dlatego czasem dobrze jest uy wskazania.
.PP
Czsto bardziej czytelne jest uycie pomidzy parami klucz/warto operatora
\f(CW=>\fR. Operator ten jest po prostu bardziej wyrniajcym si wzrokowo
synonimem przecinka. Ponadto powoduje, e jego lewostronny operand jest
interpretowany jako acuch, jeli jest on goym sowem, ktre mogoby by
poprawnym identyfikatorem.
Uprzyjemnia to inicjowanie haszy:
.PP
.Vb 5
\&    %map = (
\&                 czerwony  => 0x00f,
\&                 niebieski => 0x0f0,
\&                 zielony   => 0xf00,
\&   );
.Ve
lub inicjowanie odwoa do haszy, ktre bd uywane jako rekordy:
.PP
.Vb 5
\&    $rec = {
\&                witch => 'Mable the Merciless',
\&                cat   => 'Fluffy the Ferocious',
\&                date  => '10/31/1776',
\&    };
.Ve
albo uycie wywoywanych przez nazw parametrw skomplikowanej funkcji:
.PP
.Vb 7
\&   $field = $query->radio_group(
\&               name      => 'group_name',
\&               values    => ['eenie','meenie','minie'],
\&               default   => 'meenie',
\&               linebreak => 'true',
\&               labels    => \e%labels
\&   );
.Ve
Zwr uwag na to, i fakt, e tablica asocjacyjna jest zainicjowana w takim
porzdku, nie oznacza, e zostanie zwrcona w tym samym porzdku. Przykady,
jak uoy kolejno zwracanych wynikw znajdziesz przy opisie \f(CWsort\fR
w podrczniku \fIperlfunc\fR(1).
.Sh "Typeglob i uchwyty plikw"
Perl posuguje si wewntrznym typem zwanym \fItypeglob\fR. Przechowuje w nim
wszystkie zapisy tablicy symboli. Przedrostkiem typu typeglob jest \f(CW*\fR,
gdy reprezentuje on wszystkie typy. By on zalecanym sposobem przekazywania
tablic i tablic asocjacyjnych przez odwoanie do funkcji, ale obecnie istniej
prawdziwe odwoania, wic jest to rzadko potrzebne.
.PP
Podstawowym zastosowaniem typeglob we wspczesnym Perlu jest tworzenie
synonimw tablicy symboli. To przypisanie:
.PP
.Vb 1
\&    *cos = *inne;
.Ve
robi \f(CW$cos\fR synonimem (aliasem) dla \f(CW$inne\fR, \f(CW@cos\fR
jest aliasem dla \f(CW@inne\fR, \f(CW%cos\fR aliasem dla \f(CW%inne\fR,
&cos aliasem dla &inne, itd. Duo bezpieczniej jest uy odwoania (wskazania).
To:
.PP
.Vb 1
\&    local *Tutaj::niebieski = \e$Tam::zielony;
.Ve
tymczasowo czyni \f(CW$Tutaj::niebieski\fR aliasem dla \f(CW$Tam::zielony\fR,
ale nie robi \f(CW@Tutaj::niebieski\fR aliasem dla \f(CW@Tam::zielony\fR, czy
\f(CW%Tutaj::niebieski\fR aliasem dla \f(CW%Tam::zielony\fR, itd.
W sekcji \fISymbol Tables\fR podrcznika \fIperlmod\fR(1) znajdziesz wicej
takich przykadw. Mimo, e moe to wyglda dziwnie, jest to podstaw caego
systemu importu/exportu moduw.
.PP
Innym zastosowaniem typeglob jest przesyanie uchwytw plikw do funkcji lub
tworzenie nowych uchwytw. Jeeli potrzebujesz posuy si typeglob, by
zachowa uchwyt pliku, zrb to tak:
.PP
.Vb 1
\&    $fh = *STDOUT;
.Ve
albo moe jako prawdziwe odwoanie, jak to:
.PP
.Vb 1
\&    $fh = \e*STDOUT;
.Ve
W podrczniku \fIperlsub\fR(1) znajdziesz przykady zastosowania typeglob jako
porednich uchwytw plikw w funkcjach.
.\" indirect filehandles
.PP
Typeglob s rwnie sposobem na tworzenie lokalnych uchwytw plikw przy uyciu
operatora \fIlocal()\fR. Istniej wwczas a do wyjcia z ich bloku, ale
mog by przesane powtrnie.
Na przykad:
.PP
.Vb 7
\&    sub newopen {
\&        my $path = shift;
\&        local *FH;  # nie my!
\&        open   (FH, $path)          or  return undef;
\&        return *FH;
\&    }
\&    $fh = newopen('/etc/passwd');
.Ve
Obecnie, gdy dysponujemy notacj *foo{\s-1CO\s0}, typeglob nie s tak czsto
uywane do manipulowania uchwytami plikw, chocia wci s konieczne do
przesania cakiem nowego uchwytu pliku czy katalogu do funkcji czy z funkcji.
Wynika to std, e *\s-1UCHWYT\s0{\s-1IO\s0} dziaa tylko jeli \s-1UCHWYT\s0
by ju uyty jako uchwyt. Inaczej mwic, do tworzenia nowych wpisw w tablicy
symboli moe posuy *\s-1FH\s0, ale nie *foo{\s-1CO\s0}.
.PP
Inn metod tworzenia anonimowych uchwytw plikw jest wykorzystanie moduu
\s-1IO::\s0Handle. 
.\" module and its ilk.
Zalet tych moduw jest nieukrywanie rnych typw tej samej nazwy podczas
\fIlocal()\fR. Na kocu opisu \f(CWopen()\fR w podrczniku \fIperlfunc\fR(1)
zamieszczono odpowiedni przykad.
.PP
Dalsze rozwaania na temat typeglob i skadni *foo{\s-1THING\s0} znajdziesz
w podrcznikach \fIperlref\fR(1) i \fIperlsub\fR(1), a take w sekcji
\fISymbol Tables\fR podrcznika \fIperlmod\fR(1).

.rn }` ''
.IX Title "PERLDATA 1"
.IX Name "perldata - typy danych Perla"

.IX Header "NAZWA"

.IX Header "OPIS"

.IX Subsection "Nazwy zmiennych"

.IX Subsection "Kontekst"

.IX Subsection "Wartoci skalarne"

.IX Subsection "Scalar value constructors"

.IX Subsection "List value constructors"

.IX Subsection "Typeglobs and Filehandles"