ARCHIV |
|||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Perl (3) - Proměnné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? 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:
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:
To je takřka nicneříkající. Zato následující kód je již hezky čitelný:
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.
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ýmiDo 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ů:
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.
Uložme a spusťme program. Dostaneme kupodivu toto:
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:
Po spuštění dostaneme:
(Pokud nejde spustit, pravděpodobně chybí na začátku souboru #!/usr/bin/perl nebo nemáte správně nastavená práva.) Kopie proměnnýchJe 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.
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í.
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.
Deklarace proměnnýchDosud 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.
Častější však bývá uvedení řádku use warnings;, který dělá podobnou věc.
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.
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.
Související články
Předchozí Celou kategorii (seriál) Další
Perl (1) - Dávka teorie na úvod
Perl (2) - Úvod do syntaxe Perl (4) - Čísla a řetězce Perl (5) - Podmínky Perl (6) - Pravdivostní výrazy Perl (7) - Vstup poprvé Perl (8) - Některé základní vestavěné funkce Perl (9) - Cykly Perl (10) - Další řídící struktury Perl (11) - Pole - úvod Perl (12) - Pole - základní operace Perl (13) - Hashe Perl (14) - Další nástroje pro seznamy Perl (15) - Výchozí proměnná, heredoc, symbolické odkazy Perl (16) - Regulární výrazy - začínáme Perl (17) - Regulární výrazy - kotvy Perl (18) - Regulární výrazy - množiny znaků Perl (19) - Regulární výrazy - opakování a kvantifikátory Perl (20) - Regulární výrazy - magické závorky Perl (21) - Regulární výrazy - nahrazování Perl (22) - Regulární výrazy - přepínače Perl (23) - Regulární výrazy - rozšířené vzory Perl (24) - Regulární výrazy - příklady Perl (25) - Regulární výrazy - závěr Perl (26) - Podprogramy Perl (27) - Prototypy Perl (28) - Rozsahy platnosti proměnných Perl (29) - Úvod k práci se soubory Perl (30) - Práce se soubory Perl (31) - Testování souborů Perl (32) - Jiné typy souborů Perl (33) - Formátování výstupu - printf Perl (34) - Formátování výstupu - formáty Perl (35) - Vestavěný debugger Perl (36) - Grafické debuggery Perl (37) - Začínáme s moduly Perl (38) - Rozhraní modulu Perl (39) - Pragma Perl (40) - Dodatky k modulům Perl (41) - CPAN Perl (42) - Argumenty příkazového řádku Perl (43) - Přepínače Perl (44) - Dlouhé přepínače Perl (45) - Odkazy Perl (46) - Užití odkazů a anonymní data Perl (47) - Složitější datové struktury Perl (48) - Libovolně složité datové struktury Perl (49) - Tabulky symbolů a typegloby Perl (50) - Uzávěry a iterátory Perl (51) - Signály Perl (52) - Externí příkazy Perl (53) - Režim nakažení Perl (54) - Fork Perl (55) - Eval Perl (56) - Volby příkazu perl Perl (57) - Jednořádkové skripty Perl (58) - OOP - úvod Perl (59) - OOP - typické použití Perl (60) - OOP - dědičnost Perl (61) - OOP - přínos a užití dědičnosti Perl (62) - OOP - přetěžování Perl (63) - OOP - závěr Perl (64) - Projekt - čtečka sportovních výsledků Perl (65) - Projekt - získání dat Perl (66) - Projekt - výběr zápasů a podrobnosti Perl (67) - Projekt - dokončujeme modul Perl (68) - Projekt - zobrazení zápasů Perl (69) - Projekt - online přenos Perl (70) - Plain Old Documentation Perl (71) - Navazování proměnných Perl (72) - Navazování složitějších datových typů Perl (73) - DBM Perl (74) - Sockety Perl (75) - Obsluha více klientů Perl (76) - Síťová hra v kostky Perl (77) - Služby internetu Perl (78) - Databáze - úvod Perl (79) - Databáze - manipulace s daty Perl (80) - Databáze - závěrečné poznámky Perl (81) - CGI - příprava webového serveru Perl (82) - CGI - první skripty Perl (83) - CGI - získávání dat od uživatele Perl (84) - CGI - usnadnění tvorby skriptů pomocí modulu CGI Perl (85) - CGI - generování dokumentu modulem CGI Perl (86) - CGI - cookies Perl (87) - CGI - příklad aplikace Perl (88) - CGI - závěr Perl (89) - Mason - snadné psaní webů Perl (90) - Mason - speciální bloky Perl (91) - Mason - handlery Perl (92) - Mason - závěr Perl (93) - Catalyst - MVC framework pro Perl Perl (94) - Catalyst - základy pro psaní aplikace Perl (95) - Catalyst - šablony Perl (96) - Catalyst - spolupráce s databází Perl (97) - Curses - tvorba textových uživatelských rozhraní Perl (98) - Curses - pozicování a okna Perl (99) - Curses - měření rychlosti psaní Perl (100) - Curses - použití hotových widgetů Perl (101) - Curses - jednoduchý textový editor Perl (102) - Rozšiřování Perlu pomocí XS Perl (103) - Rozšiřování Perlu pomocí SWIG Perl (104) - Testování rychlosti Perl (105) - Testování programových jednotek Perl (106) - Debugování pomocí komentářů Perl (107) - Moose - moderní objektový systém Perl (108) - Moose - základní vlastnosti Perl (109) - Moose - role Perl (110) - Moose - meta API Perl (111) - Pokročilá práce se seznamy Perl (112) - Práce s PDF Perl (113) - Práce s archivy Perl (114) - Tk - úvod Perl (115) - Tk - umísťování widgetů Perl (116) - Tk - základní widgety Perl (117) - Tk - některé pokročilejší widgety Perl (118) - Tk - čas a události Perl (119) - Tk - CD man Perl (120) - Wx - základní práce s widgety Perl (121) - Wx - události Perl (122) - Gtk2 - úvod Perl (123) - Gtk2 - základní práce s obrázky Perl (124) - Gtk2 - události a čas Perl (125) - Gtk2 - vlastní widgety Perl (126) - Gtk2 - textové okno a práce s pozicemi Perl (127) - Gtk2 - hierarchické seznamy Perl (128) - Gtk2 - dialogy Perl (129) - Gtk2 - skládání widgetů Perl (130) - Gtk2 - menu a toolbary Perl (131) - Gtk2 - transparentní okna, tray ikona, výběr souborů Perl (132) - Gtk2 - drag&drop, druid Perl (133) - Gtk2 - úpravy vzhledu aplikací pomocí rc Perl (134) - Gtk2 - Glade Interface Designer Perl (135) - XML - čtení a zápis Perl (136) - XML - DOM a SAX přístupy Perl (137) - Vlákna Perl (138) - Memoizace - cachování podprogramů Perl (139) - Profilling - efektivní odhalování pomalých míst v programu Perl (140) - Profilling - píšeme si vlastní profiler / debugger Perl (141) - Formátování kódu, deparsování, perltidy Perl (142) - Způsoby konfigurování Perl (143) - Struktura datových typů, správa paměti Perl (144) - POE - událostmi řízené programování Perl (145) - POE - aplikace typu klient-server Perl (146) - Perl 6 - jazyk budoucnosti Perl (147) - Perl 6 - regulární výrazy, nové operátory Perl (148) - Perl Culture Perl (149) - Závěr Pozvánka na Český Perl Workshop Perl 5.22.0 a vše okolo Perl 5.24.0 a vše okolo Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |