Ocenite etot tekst:


V Pel sushchestvuet tri tipa struktur dannyh: skalyary, massivy skalyarov i
heshi (hashes) - associativnye massivy skalyarov. Obychno elementy massivov
indeksiruyutsya celymi chislami, pervyj element - nulevoj. Otricatel'noe
znachenie indeksa oboznachaet nomer pozicii elementa s konca. Heshi indeksiruyutsya
strokami simvolov.

Imena skalyarnyh peremennyh vsegda nachinayutsya s simvola '$' dazhe kogda
oboznachayut element massiva.



	$var1		# Prostoj skalyar 'var1'

	$var1[0]	# Pervyj element massiva 'var1'

	$var1{'first'}	# |lement s indeksom 'first'


V sluchae ispol'zovaniya imeni massiva "celikom" ili ego "sreza"
pered imenem massiva stavitsya simvol '@'.



	@var1		# Vse elementy massiva var1 ( $var1[0], $var1[1], ... $var1[n])

	@var1[1,3,10]	# |lementy $var1[1], $var1[3], $var1[10]

	@var1{'first','last'} # to zhe chto i ( $var1{'first'}, $var1{'last'} )

Hesh "celikom" nachinaetsya s simvola '%'.

Primer:

	%var, %key, %years

Imena podprogramm nachinayutsya simvolom '&' esli iz konteksta ne vidno
chto eto podprogramma.

Primer:

	&sub1, &test_prog, test(12)

Imena tablic simvolov vsegda nachinayutsya simvolom '*'.

Kazhdyj tip peremennyh imeet svoyu oblast' pamyati poetomu $var1 i $var1[0]
sovershenno raznye peremennye, hotya $var1[0] chast' massiva @var1. Tak zhe\
@var1 i %var1 - raznye massivy peremennyh.

Imena peremennyh mogut soderzhat' lyubye bukvenno-cifrovy simvoly za isklyucheniem
probela i tabulyacii. |ti smvoly ispol'zuyutsya v kachestve razdelitelej.
Bol'shie i malye bukvy razlichayutsya poetomu $var1 i $Var1 - raznye
peremennye. V Pel po umolchaniyu imena metok i ukazatelej fajlov pishut
bol'shimi bukvami.



Bol'shoe znachenie dlya pravil'nogo upotrebleniya vstroennyh funkcij
imeet kontekst ispol'zovaniya rezul'tata etih funkcij t.k. v protivnom
sluchae oni vozvrashchayut sovershenno "neponyatnyj" rezul'tat.
V Pel imeetsya dva glavnyh konteksta: skalyarnyj i spisok (list).
Proshche govorya esli v levoj chasti vyrazheniya imeetsya vvidu odno edinstvennoe znachenie - to
eto skalyarnyj kontekst. Esli mnozhestvo znachenij - spisok.

Primer:

	$var1 = <>;	# Prochitat' odnu stroku fajla

	@var1 = <>;	# Prochitat' vse stroki fajla v massiv @var1

	$var1 = (1,2,3); # $var = 3 - kolichestvo elementov

	@var1 = (1,2,3); # Sozdanie massiva @var1 s elementami 1,2,3



Vse dannye v Pel eto skalyary, massivy skalyarov i heshi skalyarov.
Skalyarnye peremennye mogut soderzhat' chisla, stroki i ssylki.
Preobrazovanie chisla - stroki proishodit avtomaticheski po umolchaniyu.
Skalyar mozhet imet' tol'ko odno edinstvennoe znachenie, hotya eto
mozhet byt' ssylka na massiv skalyarov. Tak -kak Pel sam preobrazovyvaet
chisla v stroki i naoborot to programmistu net neobhodimosti dumat'
o tom chto vozvrashchaet funkciya.

V Pel ne sushchestvuet tipov "stroka" ili "chislo" ili "fajl" ili chto to eshche.
|to kontekstno zavisimyj polimorfnyj yazyk dlya raboty s tekstami.

Skalyar imeet logicheskoe znachenie "TRUE" (istina) esli eto ne nulevaya
stroka ili chislo ne ravnoe 0.

V Pel sushchestvuet dva tipa nulevyh (null) skalyarov - opredelennye
(defined) i ne opredelennye (undefined). Ne opredelennoe znachenie
vozvrashchaetsya kogda chto-to ne sushchestvuet. Naprimer ne izvestnaya
peremennaya, konec fajla ili oshibka. S pomoshch'yu funkcii defined()
vy mozhete zaranee obnaruzhit' podobnoe sostoyanie.

Kolichestvo elementov massiva tak zhe yavlyaetsya skalyarom i nachinaetsya
simvolami $# podobno interpretatoru csh. Fakticheski $#var1 - eto
indeks poslednego elementa massiva. Nuzhno pomnit' chto pervyj
element imeet indkes 0 poetomu kolichestvo elementov opredelyaetsya
kak $#var1+1 . Prisvoenie znacheniya $#var1 - izmenit dlinu
massiva i razrushit "ostavlennye" znacheniya.
Prisvoenie znacheniya elementu massiva s indeksom bol'she chem $#var1
- uvelichit razmer massiva, a prisvoenie emu nulevogo spiska -
obnulit.

V skalyarnom kontekste imya massiva vozvrashchaet ego dlinu (dlya spiska
vozvrashchaetsya poslednij element).

Primer:

	@var1 = (4, 3, 2, 1);	# Prisvoenie znacheniya elementam massiva
	$i = @var1;		# Ispol'zovanie skalyarnogo konteksta
	print $i;		# Pechat' rezul'tata 4 - kol-vo elementov
	print @var1;		# Spiskovyj kontekst, pechat' vseh elementov.

Dlya prinuditel'nogo polucheniya skalyarnogo znacheniya udobno primenyat'
funkciyu scalar().

Primer:

	print scalar(@var1);	# Vyvod dliny massiva a ne ego znachenij

Hesh v skalyarnom kontekste vozvrashchaet "true" esli sushchestvuet
hotya by odna para "klyuch-znachenie". Fakticheski vozvrashchaetsya stroka
tipa 2/8 gde 8 - kolichestvo vydelennyh "yacheek" pamyati a
2 - kolichestvo ispol'zovannyh.

Konstruktory skalyarov.

CHisla pishutsya standartno:

	123
	123.123
	0.12
	.12E-10
	0xABCD		# SHestnadcetirichnaya zapis'
	0377		# Esli 0 v nachale - vos'merichnaya
	123_456_123	# Tak tozhe mozhno dlya udobstva chteniya.

Stroki ogranichivayutsya odinarnymi (') ili dvojnymi (") kavychkami:

	'Rovnyajs', smirno!'
	"Postroemsya i spasemsya."

Sposobov oboznacheniya strok ochen' mnogo. Plodrobno smotrite opisanie
operatora qq.
 V heshe mozhno opuskat' kavychki esli indeks ne soderzhit probelov.

Primer:

	$var1{first} to zhe chto i $var1{'first'}

Obratite vnimanie na to chto pered pervoj odinarnoj kavychkoj dolzhen stoyat'
probel inache stroka vosprimetsya kak imya peremennoj tak-kak v imenah
razresheno ispol'zovanie odinarnyh kavychek.
Zapreshchaetsya v kavychkah primenyat' zarezervirovannye literaly __LINE__
(nomer tekushchej stroki programmy), __FILE__ (tekushchij fajl).
Dlya oboznacheniya konca programmy mozhno primenyat' literal __END__
Ves' posleduyushchij tekst ignoriruetsya, no ego mozhno prochitat' ispol'zuyu
ukazatel' fajla DATA.

Slova v programme ne poddayushchiesya ni kakoj intepretacii vosprinimayutsya
kak stroki v kavychkah poetomu rekomenduetsya imena metok i ukazatelej fajlov
pisat' bol'shimi bukvami dlya izbezhaniya vozmozhnogo "konflikta" s zarezervirovannymi
slovami.

V Pel est' vozmozhnost' vstavlyat' tekst dokumenta pryamo v programmu.
Tak nazyvaemyj "here-doc" (zdes' tekst) metod. Oboznachaetsya simvolami
<< za kotorym idet slovo-ogranichitel'.

Primer:

	print <

Konstruktory spiskov.

Spisok - mnozhestvo znachenij perechislennyh cherez zapyatuyu i zaklyuchennyh v kruglye skobki. V spiskovom kontekste spisok vozvrashchaet poslednij element spiska. Primer: @var1 = (1, 2, 'privet', 1.2); # Prisvoit' znachenie elementam. gde $var1[0] = 1, $var1[1] = 2, $var1[2] = 'privet' $var1[3] = 1.2 $var1 = (1, 2, 'privet', 1.2); a zdes' $var1 = 1.2 t.e. poslednee znachenie spiska. Dopuskaetsya primenyat' v spiske drugie spiski, no v poluchennom spiske uzhe nevozmozhno razlichit' nachalo i konec vklyuchennyh spiskov. Primer: @s1 = (1, 2, 3); # Pervyj spisok @s2 = (6, 7, 8); # Vtoroj @s = (0, @s1, 4, 5, @s2, 9, 10); # Vklyuchaem spiski @s1 i @s2 print @s; # Rezul'tat: 012345678910 - znacheniya bez probelov. Spisok bez elementov oboznachaestya kak () i nazyvaetsya nul'-spiskom. Spiskovoe vyrazhenie mozhno upotreblyat' kak imya massiva, no pri etom ego nuzhno brat' v kruglye skobki. Primer: print ('yanvar'','fevral'','mart')[1]; Rezul'tat: fevral' Spisok mozhet byt' prisvoen spisku tol'ko esli kazhdyj element v spiske v levoj chasti vyrazheniya dopustim po tipu spisku v pravoj chasti. Primer: ($a, $b, $c) = (1, 2, 3); # $a = 1, $b = 2, $c = 3 Prisvaivanie spiskov v skalyarnom kontekste vozvrashchaet kolichestvo prisvoennyh elementov. Primer: $x = (($a, $b, $c) = (1,2)); # Rezul'tat $x=2 V sluchae prisvaivaniya spiska heshu spisok razsmatrivaetsya kak pary: klyuch-znachenie. Primer: %dni_mesyaca = ('yanvar'', 31, 'fevral'', 30); Rezul'tat: $dni_mesyaca{yanvar'} = 31, $dni_mesyaca{fevral'} = 30 Dlya udobstva zapisi mozhno ispol'zovat' vyrazhenie s => . Primer: %dni_mesyaca = ( yanvar' => 31, fevral' => 30, );

    Tip typeglobs

V Pel ispol'zuetsya special'nyj vnutrennij tip typeglog dlya zapisi massiva vseh peremennyh. Takie massivy nachinayutsya s simvola '*'. Ih udobno primenyat' dlya peredachi ssylok na massivy i heshi, no v dannoj versii Pel uzhe est' vozmozhnost' primenyat' ssylki poetomu eto delaetsya ochen' redko. Edinstvenno gde eto neobhodimo tak eto dlya raboty so ssylkami na fajly. Naprimer esli vam nuzhno sozdat' lokal'nuyu ssylku na fajl v procedure to eto luchshe sdelat' tak: sub new_sub { local *IN; # Ssylka na fajl open (IN, "test") || return undef; # Otkryt' fajl. Vozvrat pri oshibke. ......... return; } Bolee podrobno eto opisano v glave Ssylki.

Last-modified: Thu, 24 Apr 1997 17:45:34 GMT
Ocenite etot tekst: