LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (3) - Proměnné

Perl Věnovat se budeme základnímu kamenu programů: proměnným. Jak do proměnné přiřadit data a jak je z ní opětovně dostat?

22.2.2005 15:00 | Jiří Václavík | Články autora | přečteno 50536×

Proměnná

V každém programu, který má mít vstup nebo výstup, potřebujeme pracovat s nějakými hodnotami. Neobejdeme se tedy bez proměnných. Proměnnou si můžeme představit jako označenou oblast v paměti, do níž jsou uložena data.

Přístup k proměnným se liší jazyk od jazyka. V Perlu to funguje tak, že proměnnou můžeme použít kdekoliv v programu, aniž bychom se o ní zmiňovali dříve (deklarovali ji). Perl si vše potřebné obstará sám. Přesněji řečeno, platí to, pokud nepoužíváme režim strict.

Proměnné můžeme kategorizovat podle různých kritérií. My toto dělení zatím ponecháme stranou a budeme se věnovat tzv. skalárním proměnným, které uchovávají jedinou hodnotu. Taková proměnná se v Perlu uvozuje dolarem.

Ukažme si příklad:

#!/usr/bin/perl
$promenna = "obsah proměnné\n";
print $promenna;

Uložme si tento kód do souboru, nastavme práva pro spouštění a spusťme ho. Příkaz $promenna = "obsah promenne\n"; uloží do proměnné s názvem $promenna řetězec v uvozovkách. Tuto operaci můžeme nazvat přiřazení (je to vlastně uložení nějaké hodnoty do proměnné). Co se děje dál už víme z minulého dílu. Příkaz print tiskne na výstup. V tomto případě vytiskne obsah proměnné $promenna, který se místo názvu proměnné automaticky dosadí.

Název proměnné

Každá proměnná, jak jsme si již ukázali v příkladu, začíná znakem dolaru. Název se může skládat s písmen anglické abecedy, číslic a podtržítka. Přitom platí, že první znak jména proměnné nesmí být číslice. Délka proměnných je libovolná od 1 znaku až po 255. Délce 255 se v praxi ani zdaleka nepřiblížíme (můžete to vyzkoušet, interpret zahlásí Identifier too long).

Ani zde se nevyhneme všudypřítomné diskuzi o vhodném pojmenování proměnných. Obecně platí, že bychom měli proměnné pojmenovávat tak, aby z názvu bylo jasné, co je v ní uloženo. Ideální jsou krátké a výstižné názvy. Pokud neexistuje krátký a výstižný název, volíme dlouhý a výstižný název. Zároveň bychom neměli používat názvy typu $pocetobyvatelceskerepubliky, protože s absencí mezer člověk musí docela dlouho přemýšlet, co je tam vlastně napsané. K čitelnosti pomůže přidání podtržítek: $pocet_obyvatel_ceske_republiky už je lepší. Delší proměnné mají tu nevýhodu, že jsou náchylnější k překlepům a navíc je psaní programů o něco pomalejší. Avšak lepší je zvolit proměnnou s delším než s nejasným názvem.

Název proměnné tedy budeme volit podle toho, co hodnota v ní vyjadřuje. Podívejme se na jeden odstrašující příklad za všechny:

$promenna1 = $promenna2 * $promenna3 * $promenna4;

To je takřka nicneříkající. Zato následující kód je již hezky čitelný:

$obsah_kvadru = $a * $b * $c;

Perl rozlišuje velikost písmen identifikátorů. Proměnná $promenna není totožná s proměnnou $PROMENNA. Existuje ale nepsané pravidlo, že jména proměnných se zapisují malými písmeny. Je to z důvodu přehlednosti. Jiné druhy identifikátorů (zatím jsme si o nich neříkali) se píší zas jiným způsobem - podívejme se na tabulku.

Typ identifikátoruZpůsob zápisu dle zvykuPříklad
Proměnné, podprogramymalými písmeny$promenna, &podprogram()
BalíkyPrvní písmeno slova velké, ostatní maláMojeTrida
Návěští, konstanty, zdroje datvelkými písmenyNAVESTI:, KONSTANTA, <STDIN>

V jednom programu se nemůže vyskytovat více než jedna proměnná stejného názvu a stejného typu ve smyslu datového skalár, pole, hash atd. To je logické, neboť bychom je nemohli rozlišit. Později zjistíme, že existuje něco jako rozsah platnosti proměnné, což nám pojem "stejný název proměnné" představí ještě v trochu jiném světle. Není totiž vůbec tak zřejmé, kdy proměnná je a kdy není dostupná. Tomuto se ale budeme věnovat později.

Práce s proměnnými

Do proměnné můžeme přiřazovat řetězce, čísla (ať už celá nebo desetinná), seznamy hodnot, ovladače nebo odkazy. Během provádění programu se může proměnná mezi číslem a řetězcem automaticky konvertovat. Perl je v tomto směru velmi benevolentní. Pokud na začátku programu použijeme proměnnou jako číslo, může být v jeho průběhu měněna na řetězec a obráceně. Dokonce nemusíme měnit její obsah. Jakýkoliv řetězec si Perl sám převede na číslo a naopak. V dalším dílu uvedeme pravidla, kterými se tato konverze řídí.

Délka informace uvnitř proměnné je omezena jen velikostí paměti.

Co je to přiřazení již víme. Uveďme si ještě několik příkladů:

$promenna = "normální řetězec";

#řetězec je uprostřed 2× zlomen. Do proměnné se uloží i escape znaky.
$promenna = "řetězec\nna 3\nřádcích";

#$promenna obsahuje číslo
$rok = 2005;

#desetinné číslo
$e = 2.71828;

#nespravné názvy proměnných. Interpret hlásí chybu.
$x&y = 2005;
$44 = 2006;

Operátor = není jediným přiřazovacím příkazem. Další poznáme v příštím dílu.

Uvození řetězců

Všechny hodnoty v uvozovkách jsou Perlem brány jako řetězec. Mimo uvozovek lze použít i apostrofy. Existují ještě jiné způsoby zápisu, ale těmi se nyní nemá smysl zatěžovat. Apostrofy se liší od uvozovek tím, že ignorují escape znaky a proměnné v řetězci. Podívejme se na rozdíl.

$promenna = 2005;
print 'retezec s escape sekvencemi \n\a a promennymi $promenna';

Uložme a spusťme program. Dostaneme kupodivu toto:

$./program.pl
retezec s escape sekvencemi \n\a a promennymi $promenna\n
$ 

Existují dvě výjimky, které řetězec uvozený apostrofy zobrazí jinak, než jak je napsaný. Těmi výjimkami jsou \' a \\, umožňující do řetězce vložit apostrof a zpětné lomítko. Nebýt nich, tak apostrof nevytiskneme.

Stejný příklad, jen zaměníme apostrofy za uvozovky:

$promenna = 2005;
print "retezec s escape sekvencemi \n\a a promennymi $promenna";

Po spuštění dostaneme:

$./program.pl
retezec s escape sekvencemi
a promennymi 2005
$ 

(Pokud nejde spustit, pravděpodobně chybí na začátku souboru #!/usr/bin/perl nebo nemáte správně nastavená práva.)

Kopie proměnných

Je možné mít na obou stranách operátoru přiřazení proměnné. Vyhodnotí se proměnná napravo (Perl si zjistí její hodnotu) a tato hodnota se přiřadí do proměnné nalevo.

$pi = 3.142;
$pi_kopie = $pi;
print $pi_kopie;

V takovém případě se vytvoří kopie původní proměnné.

Na jednom řádku můžeme přiřadit stejnou hodnotu i více proměnným. To asi příliš často nevyužijeme, ale je vhodné o tom vědět. Ve skutečnosti existuje něco jako návratová hodnota po operaci přiřazení.

$a = $b = 2005;

Nyní jak hodnota $a tak i $b obsahují hodnotu 2005.

Přepsání hodnoty proměnné

Když provedeme přiřazení do stejné proměnné dvakrát po sobě, původní obsah se ztratí a nahradí se novým.

$p = 1;
print $p; #1

$p = 2;
print $p; #2

Deklarace proměnných

Dosud jsme proměnné nikdy nedeklarovali. V Perlu je to možné. Je dobré toho využívat, protože v programu budeme mít větší pořádek. Bude potom na pohled jasnější, kde která proměnná existuje a kde už ne. Nebudeme se věnovat deklaracím do hloubky, to ponecháme na jindy. Uveďme jen, že k deklaraci slouží deklarátor my. Jeho parametrem je jméno proměnné, která bude platná v daném bloku programu.

Příkaz use strict;, uvedený na začátku programu spouští speciální mód, který nás hlídá abychom (mimo jiné) všechny proměnné deklarovali. Pokud zapomeneme nějakou proměnnou deklarovat, program zahlásí chybu.

Další užitečná věc je přepínač -w. Pokud spustíme Perl příkazem perl -w, budou se vypisovat varování, která mohou napomoci odstranit případné chyby. Přepínač lze připsat do prvního řádku programu.

#!/usr/bin/perl -w
use strict;

my $p;

$p = 3;
print $p;

Častější však bývá uvedení řádku use warnings;, který dělá podobnou věc.

#!/usr/bin/perl
use strict;
use warnings;

my $p;

$p = 3;
print $p;

V režimu strict nám Perl nedovolí použít proměnnou, aniž bychom ji deklarovali. Odstraníme-li řádek my $p; program vypíše chybové hlášení a skončí.

Režim strict se ruší příkazem no strict;. Ten budeme používat jen výjimečně. Pokračujme ale přesto v kódu.

no strict;

$q = 3;
print $q;

Proměnnou $q jsme teď definovat nemuseli.

Vícee o use strict;, deklaracích proměnných a případně jiných direktivách bude napsáno v dílech o modulech.

Verze pro tisk

pridej.cz

 

DISKUZE

A co datove typy? 22.2.2005 17:11 Roman Vašíček
|- Re: A co datove typy? 23.2.2005 14:07 Jiří Václavík
| L Re: A co datove typy? 24.2.2005 08:36 Hynek (Pichi) Vychodil
L Re: A co datove typy? 24.2.2005 11:07 Josef "jose" Kadlec
Délka názvy proměnné 24.2.2005 08:45 Hynek (Pichi) Vychodil




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera

Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.


Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

20.2.2018 18:48 / Ivan Majer
portal

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze