19:57 <@mulander> :) 19:57 -!- Topic for #wyklady: Najblizszy wyklad: PERL: #1 - piatek 20:00 (wstep, by mulander) | Terminy+Info: http://gynvael.vexillium.org/wyklady | lista zadan z C: http://gynvael.vexillium.org/lista.txt (jarekj prowadzi - 1025pkt, G0blin drugi, 1000 pkt) (nowe zad) 19:57 -!- Topic set by Gynvael [~gynvael@shine.bright.morning.light] [Fri Sep 23 01:16:27 2005] 19:58 < MEAL> BeOm_: no to na co Ci logi jak tu bedziesz 19:58 < ant_> mulander dawaj ten wyklad :) 19:58 < MEAL> Slimowi podrzuce jak cos 19:58 < ant_> bo zaraz film w tv :> 19:58 < MEAL> jesli tylko mulander pozwoli ;] 19:58 <@mulander> ile osob mamy teraz ? :) 19:58 < MEAL> 1 19:58 < MEAL> :P 19:59 < BeOm_> nie bede 19:59 < BeOm_> zara ide 19:59 <@mulander> rozumiem ze teraz jest ant_ BeOm_ Gynvael MEAL czy kogos pominolem? 20:00 < Vengeance> robicie +m ? 20:00 <@mulander> +m bedzie na czas jak ja bede sie produkowal ;) 20:00 <@mulander> potem -m i pytania. 20:00 < Vengeance> a kiedy czas na piwo i dziewczynki? :/ 20:00 < ant_> pss :) 20:00 <@mulander> w trakcie :P 20:01 <@mulander> ja czekam az matka ze sklepu z browarkiem wroci :P 20:01 < Vengeance> ile # jest przewidzianych ;] 20:01 <@mulander> # masz na mysli czesci ? 20:01 < Vengeance> ta 20:01 <@mulander> jezeli chodzi o programowanie to ciezko cos takiego przewidziec. 20:01 <@mulander> zalezy od zainteresowania 20:01 <@mulander> i czy wam podpasuje moj tok myslenia ;) 20:01 < MEAL> ;] 20:02 <@mulander> bo jezeli nikomu sie nie bedzie podobac to nie widze sensu kontynuowac nie ? :) 20:02 < MEAL> no niby tak 20:02 <@mulander> zanim zaczniemy pare krotkich pytanek. 20:02 <@mulander> czy wszyscy maja dostep do interpretera i ile osob jest teraz na windowsie / 20:02 <@mulander> ? 20:02 < Vengeance> win, ja 20:02 < Vengeance> int. nie :D 20:02 < Vengeance> ale ja mam int. w glowie 20:02 < MEAL> int ja 20:02 < MEAL> win nie 20:03 < ekim> win tak int nie 20:03 < ant_> moge zrobic przepelnianie heap w 64 bitowych procesorach kombajnow i podnosnikow widlowych 20:03 < ant_> jako nastepna czesc : 20:03 < ant_> ) 20:03 <@mulander> http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl 20:03 <@mulander> tutaj interpreter pod windowsa. 20:03 <@mulander> generowanie dokumentacji chwilke trwa wiec mozecie juz zaczac instalke. 20:04 < Vengeance> e to sobie w PHP napisze 20:04 < Vengeance> szybciej bedzie ;p 20:04 <@mulander> :) 20:05 <@mulander> mysle ze juz nikt wiecej nie przyjdzie, mozemy zaczynac ? 20:05 < MEAL> tak 20:05 < Vengeance> czekaj, spytam mamy 20:06 < Vengeance> mozemy 20:06 <@mulander> w takim razie zaczynamy. 20:06 -!- mode/#wyklady [+m] by mulander 20:06 -!- ant_ is now known as hehe 20:06 -!- hehe is now known as ant_ 20:06 <@mulander> Pomine nudne wstepy i przemowienia ;) 20:07 -!- mode/#wyklady [-o Gynvael] by Gynvael 20:07 <@mulander> Perl jest jezykiem interpretowanym wiec w przeciwienstwie do jezykow takich jak C/C++ po napisaniu zrodla naszego programu nie musimy tlumaczyc go na kod maszynowy. 20:08 -!- ZeroZero1 [1000@Bot.Underground] has joined #wyklady 20:08 <@mulander> Jednak w przeciwienstwie do jezykow takich jak bash, Perl prekompiluje kod zrodlowy zanim go wykona, jest to zarazem wada jak i zaleta, wada poniewaz ten proces zawsze zabiera troche czasu, co za tym idzie Perl nie nadaje sie do tworzenia aplikacji bardzo skomplikowanych i wymagajacych szybkiego dzialania. 20:09 <@mulander> zalete tej metody mozna zauwazyc jezeli mialo sie stycznosc z bashem, tam kazda instrukcja jest wykonywana po kolei, i dopiero kiedy powloka natknie sie na bledna instrukcje przerwywa dzialanie naszego programu. Przy wiekszych projektach moze to nasz zmusic do dodatkowej pracy np. usuwania plikow ktore program tworzy i korzysta podczas dzialania. 20:11 -!- Vengeance is now known as RektorWydzialuPerla 20:11 -!- dreston [~dreston@awd218.internetdsl.tpnet.pl] has joined #wyklady 20:11 <@mulander> standardowo interpreter Perl'a znajduje sie w wiekszosci dystrybucji linux/unix, niestety nie mozemy tego samego powiedziec o windowsie. Jestesmy zmuszeni do zaopatrzenia sie w takowy sami. Do dyspozycji uzytkownicy windowsa maja do wyboru albo ActivePerl oraz zwykly interpreter dostepny poprzez Cygwina. 20:12 -!- ant_ is now known as ZeroZero1_jestNapisany 20:12 -!- ZeroZero1_jestNapisany is now known as w_perlu 20:12 -!- w_perlu is now known as ant_ 20:12 <@mulander> Perl sprawdza sie najbardziej w parsowaniu tekstu i generowaniu raportow, jednak jest ciagle rozwijany i zakres jego mozliwosci stale sie powieksza. 20:13 <@mulander> Tyle jezeli chodzi o drobny wstep do jezyka, sama historie powstania i rozwoju mozna bez problemu znalezc w sieci i szkoda zarowno waszego jak i mojego czasu bym teraz omawial to zagadnienie ;) 20:13 <@mulander> Dla tych ktorzy nigdy nie mieli stycznosci z Perlem kilka podstaw pomagajacych zaczac. 20:14 <@mulander> Programy mozemy tworzyc w dowolnym edytorze tekstowym, osobiscie preferuje vi, jednak emacs jest rownie popularny. Inna kwestia jest uruchamianie skryptow w Perl'u. Mamy tutaj kilka opcji. 20:15 <@mulander> Mozemy uruchamiac nasze programy/skrypty poprzez besposrednie wywolanie interpretera w powloce ( dziala zarowno na linuksie jak i windowsie ) przykladowo: perl nazwa.pl 20:16 <@mulander> Druga metoda to nadanie praw wykonywalnych dla naszego programu ( chmod +x nazwa.pl, pod windowsem oczywiscie zbedne ) nastepnie uruchomienie poprzez ./nazwa.pl ( na Win XP starczy sama nazwa jednak metoda ta nie jest kompatybilna z ActivePerl'em przeznaczonym dla starrszych wersji tego systemu ) 20:17 -!- MEAL is now known as MEAL`wyklad 20:17 -!- Ascon [~Ascon@ais151.neoplus.adsl.tpnet.pl] has joined #wyklady 20:18 <@mulander> Dodam ze metoda pliku wykonywalnego wymaga poprawnego ustawienia linii shebang w skrypcie, tak jak w przypadku basha, jest to pierwsza linia skryptu, ktora wskazuje polozenie interpretera standardem przyjetym przez wiekszosc programistow Perl'a jest: #!/usr/bin/perl , uzywaja tego shebangu zarowno osoby korzystajace z systemow typu linux/unix jak i programistow windowsa ( z wyjatkiem niewielu przypadkow uzycia #!C:\Perl\bin\perl.exe, jednak jest to zbedne p 20:18 -!- crook [~cr00k@crook.the.master] has joined #wyklady 20:19 <@mulander> Na windowsie istnieje rowniez mozliwosc odpalenia skryptu poprzez standardowy dwuklik jednak podawanie parametrow do programu jest wtedy bardzo utrudnione dodatkowo aby ActivePerl skojazyl iz wykonywany plik nalezy do obowiazkow interpretera musi posiadac rozszerzenie .pl lub .plx 20:21 <@mulander> ostatnia metoda jaka omowimy jest kompilacja skryptu, jest to mozliwe do zrobienia na kilka sposobow. a) poprzez program perlcc standardowo dolaczony do interpretera ( jednak na windowsie zapewne zadziala lepiej poprzez Cygwina ) b) uzcie programu perl2exe ktory juz trzeba samemu znalezc w sieci 20:22 <@mulander> Skompilowane skrypty Perl'a maja jednak tendencje do nieprawidlowego dzialania. Szczegolnie duzo problemow wystepuje przy programach korzystajacych z bibliotek graficznych oraz uzywajacych funkcji fork(); tudziez multithreadingu. 20:22 -!- mode/#wyklady [-m] by mulander 20:22 <@mulander> chwilka przerwy na pytania o ile jakies sa ? 20:23 < RektorWydzialuPerla> hmm 20:23 < d0ubl3_j> do czego? 20:23 < RektorWydzialuPerla> a jak sie ma odpalanie 20:23 < RektorWydzialuPerla> do tworzenia dyn. stron w perlu 20:23 < RektorWydzialuPerla> def. CGI w httpd.conf styka? 20:24 <@mulander> to juz zalezy od konfiguracji apache. 20:24 -!- dreston [~dreston@awd218.internetdsl.tpnet.pl] has quit [Client Quit] 20:24 <@mulander> osobiscie nie zajmuje sie tworzeniem www. 20:24 < RektorWydzialuPerla> ok dawaj dalej i przejdzmy wreszcie do skladni ;p 20:24 <@mulander> takze ten temat wykracza w pewnym stopniu poza moje kompetencje. 20:24 <@mulander> z nudnych rzeczy pozostaly moze jeszcze 3 i przechodzimy do konkretow ;) 20:25 <@mulander> mozemy kontynuowac ? 20:25 -!- d3a7h [~d3a7h@cpz144.neoplus.adsl.tpnet.pl] has joined #wyklady 20:25 < d0ubl3_j> tak ;> 20:25 < d3a7h> hi all 20:25 < d0ubl3_j> hi 20:25 -!- mode/#wyklady [+m] by mulander 20:25 <@mulander> Perl oferuje nam kilka ciekawych rozwiazan. 20:26 -!- ant_ is now known as LepperWtvp1 20:26 -!- LepperWtvp1 is now known as ant_ 20:27 <@mulander> Dwie najbardziej uzyteczne rzeczy z jakich programista perla najczesciej korzysta to a) perldoc b) CPAN, perldoc to pewien odpowiednik linuksowego man, ktory daje nam bezposredni i wygodny dostep do bardzo obszernej i w miare przystepnie napisanej dokumentacji Perla. 20:28 <@mulander> b) CPAN czyli Comprehensive Perl Archive Network, to jeden ogromny zbior modulow do Perla, jezeli zaczynasz pisac program w Perlu, dobrze jest zaczac od przeszukania dostepnych modulow na CPAN, sa bardzo duze szanse iz ktos opublikowal modul ktory przynajmniej w pewnym stopniu ulatwi ci osiagniecie celu ( o ile nie okaze sie rozwiazaniem samym w sobie ) 20:29 <@mulander> Przejdzmy teraz do pewnych przyjetych norm przez spoleczenstwo Perl'a. 20:30 <@mulander> Skrypty w pisane w Perl'u nie wymagaja zadnego rozszerzenia, jeden 99% osob piszacych w Perl'u stosuje rozszerzenie .pl aby wyroznic skrypty od innych plikow, uzytkownicy windowsa robia to rowniez ze wzgledu na asocjacje miedzy activeperlem a plikami z rozszerzeniem .pl 20:31 -!- Astarot [hjkhhjkhg@bie141.neoplus.adsl.tpnet.pl] has joined #wyklady 20:31 <@mulander> O nastepnym standardzie juz wspomnialem wczesniej, chodzi oczywiscie o shebang czyli pierwsza linijke skryptu ktora wskaze systemowi polozenie interpretera. 20:31 <@mulander> na potrzeby tego kursu dostosujemy sie do najbardziej powszechnego shebang'a i bedziemy stosowac #!/usr/bin/perl 20:31 -!- MEAL`wyklad is now known as MEAL 20:32 -!- MEAL is now known as MEAL`wyklad 20:32 [Users #wyklady] 20:32 [@mulander ] [ Astarot ] [ crook ] [ furiosan_ ] [ MEAL`wyklad ] [ sft|- ] 20:32 [ Annihilator] [ b3x ] [ d0ubl3_j] [ G0blin`c0d3] [ Nekrataal^AW ] [ ZeroZero1] 20:32 [ ant_ ] [ BeOm_ ] [ d3a7h ] [ Gynvael ] [ rainrider ] 20:32 [ Ascon ] [ blizzard] [ ekim ] [ Malcolm ] [ RektorWydzialuPerla] 20:32 -!- Irssi: #wyklady: Total of 22 nicks [1 ops, 0 halfops, 0 voices, 21 normal] 20:33 <@mulander> Nastepnym standardem sa dwie kolejne linijki praktycznie kazdego skryptu napisanego przez programistow Perla ktorzy nie sa masochistami ;) chodzi oczywiscie o pragmy use warnings; oraz use strict; pierwsza z nich wlacza komunikaty o bledach ktore wystepuja podczas dzialania naszego programu, np. uzycie niezainicjowanej zmiennej powiedzmy w operacji porownania. 20:34 <@mulander> druga pragma jest zlozona z trzech elementow, i wymusza pewien styl programowania ktory ma swoje dobre i zle strony. Trzy elementy jakie zawiera strict to 'vars', 'refs' oraz 'subs' 20:34 -!- BeOm_ is now known as suck_my_cock 20:36 <@mulander> Jezeli chcemy oznaczyc nasz skrypt by korzystal tylko z jednej z tych trzech restrykcji poprostu dodajemy ja po pragmie np. use strict 'vars'; Jednak najbardziej powszechna praktyka jest wlaczenie wszystkich restrykcji wpisujac poprostu use strict; 20:37 <@mulander> Zastanowmy sie teraz co dokladnie robia poszczegolne elementy, 'vars' wymusza na nas pewne zachowanie przy operowaniu zmiennymi. Dla przykladu deklarowanie zmiennych jako lokalne lub globalne ( przy wylaczonym 'vars' w ogole nie musimy deklarowac zmiennej ) 20:38 -!- d0b0c0p [~user@83.16.6.2] has joined #wyklady 20:39 -!- suck_my_cock is now known as BeOm_ 20:39 <@mulander> Uzycie tego elementu strict naprawde daje dobre korzysci miedzy innymi, deklarowanie zmiennych jako my ( czyli lokalne dla danego bloku kodu ) dziala szybciej niz zmienne z niezadeklarowanym typem. Druga sprawa jezeli nagle zamiast $trudna_nazwa wpiszemy $trudn_nazwa, interpreter upomni nas iz uzylismy nie zadeklarowanej zmiennej ( a najprawdopodobniej zrobilismy poprostu literowke ) przy wylaczonym 'vars' pracowalibysmy na calkiem nowej zmiennej a potem po 20:39 -!- B1tL4n [~B1tL4n@pb138.rzeszow.sdi.tpnet.pl] has joined #wyklady 20:40 <@mulander> Kolejnym dobrodziejstwem sprawdzania zmiennych jest mozliwosc zabicia poprzedniej zmiennej, zalozmy ze mamy zmienna $i ktora przechowuje jakas wartosc, i nagle w petli for deklarujemy $i =0; w tym momencie usunelismy byc moze wazne informacje ze zmiennej $i przy uzyciu 'vars' taka sytuacja by nie wystapila bez naszej wiedzy poniewaz zmienne byly by zadkelarowane we wlasnym zakresie nazw. 20:41 [Users #wyklady] 20:41 [@mulander ] [ Astarot] [ blizzard] [ d3a7h ] [ Gynvael ] [ rainrider ] 20:41 [ Annihilator] [ B1tL4n ] [ crook ] [ ekim ] [ Malcolm ] [ RektorWydzialuPerla] 20:41 [ ant_ ] [ b3x ] [ d0b0c0p ] [ furiosan_ ] [ MEAL`wyklad ] [ sft|- ] 20:41 [ Ascon ] [ BeOm_ ] [ d0ubl3_j] [ G0blin`c0d3] [ Nekrataal^AW] [ ZeroZero1 ] 20:41 -!- Irssi: #wyklady: Total of 24 nicks [1 ops, 0 halfops, 0 voices, 23 normal] 20:41 <@mulander> o 'refs' nie bede mowil duzo, napewno porusze ten temat przy omawianiu referencji, jednak tak jak kazdy element use strict; zaoszczedza programiscie wiele czasu. 20:42 <@mulander> 'subs' wymusza odpowiednie deklarowanie naszych wlasnych subrutyn, o tym tez szerzej w momencie jak bedziemy omawiac subrutyny. 20:43 -!- phoenix [~phoenix@cdq63.neoplus.adsl.tpnet.pl] has joined #wyklady 20:44 <@mulander> Poruszmy ostatnia rzecz zanim przejdziemy do jakiegos konkretnego tematu, chodzi o komentarze w skryptach. Kojaze wiekszosc osob ktore sa na tym kanale i napewno nie musze tlumaczyc czym sa komentarze, wiec wspomne tylko iz w Perl'u wystepuje tylko jeden typ komentarzy i dziala on dokladnie tak samo jak komentarze w bashu, jezeli w skrypcie postawimy # to wszystko do konca linii bedzie traktowane jako komentarz. 20:44 -!- mode/#wyklady [-m] by mulander 20:44 <@mulander> pytania ? 20:45 < Gynvael> mogl bys 20:45 < Gynvael> jakies przyklady podac 20:45 < Gynvael> do tego vars ? 20:45 -!- sulfur [~sulfur@213.199.204.33] has joined #wyklady 20:45 <@mulander> pelny skrypt czy moze byc kilka instrukcji ? 20:45 < Gynvael> wystarczy pare instrukcji ;> 20:46 < ekim> lepiej pelny 20:46 < Gynvael> hehehe 20:46 < BeOm_> kiedy bedzie hello world ? 20:46 < Gynvael> ok moze byc pelny ;> nie obraze sie 20:46 <@mulander> podam pelny przyklad. 20:46 <@mulander> dam +m na chwile 20:46 -!- mode/#wyklady [+m] by mulander 20:46 <@mulander> #!/usr/bin/perl 20:46 <@mulander> # na potrzeby przykladu nie uzyjemy use warnings; oraz use strict; 20:47 <@mulander> my $exit = 0; 20:47 <@mulander> until($exit) { 20:47 <@mulander> printf "Enter 'exit' to quit:"; 20:48 <@mulander> chomp ( $ext = ); 20:48 <@mulander> $exit = 1 if $exit =~ /^exit$/i; 20:48 <@mulander> } 20:49 -!- mode/#wyklady [-m] by mulander 20:49 <@mulander> teraz bez -m objasnie oco chodzi. 20:49 <@mulander> przyklad jest oczywiscie wyssany z palca ale przy duzej ilosci zmiennych latwo pomylic nazwe zmiennej. 20:49 <@mulander> w tym wypadku przerwanie naszej petli zalezy od tego czy zmienna $exit bedzie prawda czy falszem. 20:50 <@mulander> jezeli falsz to petla trwa dalej, jezeli prawda to konczy dzialanie 20:50 -!- d0b0c0p [~user@83.16.6.2] has quit [Client Quit] 20:50 <@mulander> machnelismy sie w nazwie zmiennej przy pobieraniu danych tworzac w ten sposob nowa zmienna $ext 20:50 <@mulander> oczywiscie ten przyklad jest bardzo zly napisalem go bez testowania. 20:51 <@mulander> nalezalo by tam dodac warunek else ktory w wypadku kiedy $exit jest rozny od 'exit' zmieni spowrotem wartosc na 0 20:51 <@mulander> ale mam nadzieje ze ten drobny blad mi wybaczycie. 20:52 <@mulander> chodzi oto ze w tym momencie to co wprowadza uzytkownik jest zapisywane do nowej zmiennej $ext ktora nie jest nigdzie testowana wiec nawet jak uzytkownik wpisze exit, to nasza petla bedzie nieskonczona. 20:52 <@mulander> jezeli uzylibysmy use strict; 20:52 <@mulander> to interpreter by zwrocil nam uwage ze $ext jest nie zadeklarowana zmienna. 20:53 <@mulander> dzieki temu przy dlugim kodzie latwiej bylo by sie zorientowac i zrobilismy literowke w zmiennej, inaczej trudny bylo by sie zorientowac dlaczego petla trwa w nieskonczonosc. Oczywiscie w przypadku tego przykladu nie jest to rzecz robiaca duza roznice, ale jezeli mamy 200 linijek kodu a sama petla zajmuje 40, to naprwade skroca to czas szukania bledow. 20:54 <@mulander> jakies pytania odnosnie tego przykladu ? 20:55 -!- MEAL`wyklad is now known as MEAL 20:57 <@mulander> hmm uspilem wszystkich czy brak pytan ? 20:57 < d3a7h> brak pytan 20:57 < d3a7h> :] 20:57 < ant_> brak 20:57 < ant_> ;> 20:57 < ant_> walnij jakiegos splojta w perlu 20:57 < ant_> z doglebna analiza 20:57 < ant_> ;] 20:57 < d3a7h> ant_ zaczales sie perla uczyc? 20:57 < phoenix> nic z tego nie kapuje i jedno jeszcze 20:57 <@mulander> Gynvael czy to ci wystarczy za odpowiedz ? 20:58 < ant_> d3a7h: ja sie wszystkiego uczee 20:58 < Astarot> brak pytan, prosze kontynuowac bardzo ciekawy wyklad:> 20:58 < ant_> ciagle 20:58 < ant_> ;] 20:58 < crook> ja mam takie natury tech. pytanie - piszesz to "na zywo" ? 20:58 < phoenix> czy nie mogly by byc wsztstkie wyklady o tej samej godzinie? 20:58 < crook> czy masz juz oprawacowane? 20:58 < phoenix> crook: raczej tak 20:58 -!- B1tL4n [~B1tL4n@pb138.rzeszow.sdi.tpnet.pl] has left #wyklady [] 20:58 < ant_> aktualnie czytam arty o c i asmie jeszcze 20:58 <@mulander> crook jezeli chodzi o przyklady to niestety na zywo. 20:58 < phoenix> crook: przyklady moze miec opracowane 20:58 < ant_> czekajac na film i sluchacjac rokity :) 20:58 <@mulander> jezeli chodzi o tematy to przygotowalem wczesniej. 20:58 <@mulander> niestety praca nie pozwolila na doglebne przygotowanie. 20:59 < Gynvael> mulander: ;> 20:59 < Gynvael> ta 20:59 <@mulander> lecimy dalej ? 20:59 < phoenix> Gynvael: kiedy logi beda? 20:59 < Gynvael> phoenix: juz ci wrzucam w8 20:59 < ekim> dawaj 20:59 < ant_> Gynvael: wlasnie czytam twojego arta o asmie :) 20:59 < Gynvael> dam ci na priva loga 21:00 < ant_> smiechowy :> 21:00 < Gynvael> ant_: ktorego ?;> 21:00 < phoenix> Gynvael: kk 21:00 < Gynvael> ant_: aa loga ;>> 21:00 < ant_> wyklad :> 21:00 < Gynvael> hehehe 21:00 < Gynvael> KISS ;> 21:00 < phoenix> ant_: smieszne ale sie przyda 21:00 < ant_> bedzie cos bardziej zaawansowanego? :> 21:00 < Gynvael> keep it simple ;> 21:00 < phoenix> ant_: pozwala zrozimiec 21:00 < Gynvael> ant_: tak tak 21:00 < Gynvael> dobra 21:00 < Gynvael> ja sie nie odzywam 21:00 < Gynvael> jak cos ant_ to prv 21:00 < ant_> oka :) 21:00 < Gynvael> mulander: kontynuuj plz 21:00 < phoenix> Gynvael: to mi podrzuc 21:00 -!- mode/#wyklady [+m] by mulander 21:02 <@mulander> Co perl rozumie poprzez prawde i falsz? Otoz prawda dla Perla to liczba rozna od 0 oraz ciag znakow ktory nie jest pusty, tutaj nalezy wspomniec o automatycznej konwersji pomiedzy ciagami a liczbami. 21:02 <@mulander> otoz ciag znakow "0" przy sprawdzaniu wartosci prawda/falsz zostanie skonwertowany przez perla jako liczba 0, czyli zwroci falsz pomimo iz ciag nie jest pusty. 21:03 <@mulander> ciag znakow "" bedzie zinterpretowany jako falsz. Liczba 123 jak i -123 zwroci prawde poniewaz obie sa rozne od zera. Zmienne z niezdefiniowana wartoscia rowniez zwroci falsz. 21:04 <@mulander> poprzez zmienna z niezdefinowana wartoscia rozumiemy np. my $zmienna; 21:05 -!- Ascon [~Ascon@ais151.neoplus.adsl.tpnet.pl] has quit [Killed (services.ircnet.pl (Too many invalid passwords))] 21:05 -!- mode/#wyklady [-m] by mulander 21:05 <@mulander> pytania ? 21:05 < ekim> brak 21:05 -!- Ascon [~Ascon@ais151.neoplus.adsl.tpnet.pl] has joined #wyklady 21:05 <@mulander> jezeli brak to przechodzimy do glownego tematu na ktorym sie dzisiaj skupimy, zmiennych skalarnych. 21:06 <@mulander> jezeli ktos z was programuje w Perlu to moze spokojnie sobie odpuscic ten wyklad ;) 21:06 <@mulander> poniewaz sprobojemy ten temat troche bardziej rozwinac. 21:06 < ant_> +m 21:07 -!- mode/#wyklady [+m] by mulander 21:07 <@mulander> Skoro brak pytan to przechodzimy do konkretow :) 21:07 <@mulander> Perl standardowo jest wyposazony w kilka typow zmiennych. 21:08 <@mulander> Zaczniemy od omawiania zmiennych skalarnych, jest to podstawowy typ zmiennych i kazdy nastepny typ jest zbudowany wlasnie na ich podstawie. Kazdy typ zmiennych w Perl'u jest zaopatrzony we wlasny 'sigil' czyli symbol ktory pozwala zarowno programiscie jak i interpreterowi zrozumiec na jakiej zmiennej teraz pracujemy. 21:09 <@mulander> Rzecza podstawowa jest nazwa jaka nadajemy zmiennej, ogolna zasada jest taka iz nazwa zmiennej nie moze zazynac sie od liczby oraz nie moze przekroczyc 255 znakow. Liczby moga wystapic w nazwie zmiennej jednak nie na jej poczatku, mozna rowniez uzywac twardych spacji '_'. 21:10 <@mulander> Wypada rowniez wspomniec iz rozne typy zmiennych moga miec ta sama nazwe, pomimo tego beda dalej traktowane jako inne zmienne. 21:11 <@mulander> W przeciwienstwie do takich jezykow jak C/C++, Perl nie wymaga od nas deklarowania typu zmiennej. Dla interpretera niema roznicy czy nasza zmienna przechowuje w danym momencie liczbe czy ciag znakow. Interpreter stara sie w miare potrzeby odpowiednio przeksztalcic nasza zmienna, co zaoszczedza czasu programiscie jednak z automatyczna konwersja trzeba byc ostroznym. 21:12 <@mulander> Zmienne skalarne mozemy podzielic ( jest to umowa miedzy nami ;) ) na te przechowujace liczby oraz na te zawierajace ciagi znakow. 21:14 <@mulander> Zacznijmy od tego iz perl traktuje wszystkie liczby jako zmienno przecinkowe, jezeli liczba jest liczba calkowita to jest poprostu traktowana jako odpowiednik zmienno przecinkowy tej liczby, ta konwersja przebiega bardzo gladko i prawdopodobnie nawet jej nie zauwazycie a moze was to nie bedzie nawet obchodzic ;) jednak powinniscie przestac myslec o przestac myslec o czystej pracy na liczbach calkowitych a bardziej brac pod uwage liczby zmienno precinkowe. 21:16 <@mulander> Przyjzyjmy sie kilku sposobom deklaracji zmiennych zawierajacych liczby wraz z przypisaniem pewnej wartosci przy deklaracji, oczywiscie do przypisania wartosci sluzy operator = jak w wiekszosci jezykow programowania. 21:16 <@mulander> oto przyklady: 21:16 <@mulander> my $liczba = 123; # do zmiennej $liczba pryzpisujemy wartosc 123 21:17 <@mulander> my $ujemna = -123; # do zmiennej $ujemna przypisujemy wartosc -123 21:17 <@mulander> my $float = 1.23; # do zmiennej $float przypisujemy liczbe zmienno przecinkowa w tym wypadku 1.23 21:18 <@mulander> my $naukowa = 1.23e20; # do zmiennej $naukowa przypisujemy wartosc 1.23 razy 10 do potegi 20, jest to notacja naukowa. 21:19 <@mulander> my $naukowa2 = -1.23e20; # jest to poprostu deklaracja licbzy ujemnej w notacji naukowej. 21:19 <@mulander> my $naukowa3 = 1.34e-20; # w tym wypadku jest to 1.34 razy 10 do potegi minus 20tej. 21:19 <@mulander> my $naukowa4 = 1.34E-20 # przyklad robi to samo co poprzedni, w notacji naukowej mozemy zarowno stosowac male jak i duze E 21:20 <@mulander> nalezy rowniez pamietac by nie zapisywac do zmiennej liczby zaczynajacej sie od zera, poniewaz interpreter bedzie myslal iz podajemu mu liczbe w zapisie oktalnym. 21:21 <@mulander> Perl kazda liczbe zaczynajaca sie na 0 po ktorej nastepuja kolejne cyfry bedzie traktowal jako liczbe osemkowa, z kolei liczby zaczynajace sie na 0 po ktorym wystepuje x lub X a nastepnie kolejne sekwencje liczb oraz znakow od a do f potraktuje jako liczbe szestnastkowa. 21:22 <@mulander> Wielkosc liter od a do f rowniez niema znaczenia, oczywiscie naszym celem moze byc deklarowanie liczby szestnastkowej albo octalnej, zapis jest bardzo podobny do zwyklych liczb, mozemy deklarowac ujemne jak i dodatnie. 21:23 -!- mode/#wyklady [-m] by mulander 21:23 <@mulander> jakies pytania ? 21:23 -!- Ast3rot [kartofel@abj45.neoplus.adsl.tpnet.pl] has joined #wyklady 21:23 < d3a7h> nie ;] 21:23 < d3a7h> tylko jedno 21:23 < ekim> ja mam 21:23 < d3a7h> czy mozna do Ciebie gg prosic :D 21:23 <@mulander> 816924 21:23 < d3a7h> thx 21:23 <@mulander> prosze. 21:23 < d3a7h> moj: 2682298 21:23 <@mulander> ogolnie mam nadzieje ze zabardzo nie przynudzam ;) 21:24 <@mulander> jak ktos ma sugestie co do stylu prowadzenia to walcie teraz. 21:24 < ant_> moze jakis filmik z preezentacji: 21:24 < ant_> ;] 21:24 < ekim> jak zdefiniujesz $costam= "daasdasd"; i $costam=1 i kazesz wypisac $ costam to co ci wypisze? 21:24 < d0ubl3_j> mulander: wiecej przykladoow ;> 21:24 < d0ubl3_j> plz 21:24 <@mulander> ekim jezeli uzywasz use strict; 21:24 < ekim> bo jezeli cie dobrze zrozumialem to zmienne roznych typow moga miec te same nazwy 21:25 < ekim> a wiecej przykladow popieram;) 21:25 <@mulander> to nie powinienes miec bledow co do nazw. 21:25 <@mulander> ekim odpowiedz na twoje pytanie: 21:25 <@mulander> $costam = "daasdasd"; teraz mamy w zmiennej string "daasd", $costam = 1; usuwamy ze zmiennej ciag znakow i umieszczamy 1 21:26 < d3a7h> i jesli dasz print $costam to wypisze 1 21:26 < d3a7h> :D 21:26 <@mulander> perl nie odroznia typow zmiennej, poprostu wykonuje automatyczna kowersje, niemasz odzielnych zmiennych dla liczb i ciagow znakow mowiac o typach zmiennych mialem na mysli np. $zmienna @zmienna %zmienna 21:26 <@mulander> w tym przykladzie $zmienna jest zmienna skalarna, @zmienna tablica ( w perlu lista na to czesto sie mowi ) a %zmienna jest hashem ( czyli tablica asocjacyjna ) 21:27 < ekim> no dobra powiedzmy ze czaje 21:27 < d3a7h> ale skalar mozna odczytac jako (cos => "hey", ta => "co"); 21:27 < d3a7h> tyle ze odczytuje ostatnia wartosc 21:27 < d3a7h> z tego co pamietam 21:27 <@mulander> d3a7h to co teraz podales to deklaracja elementu tablicy asocjacyjnej 21:27 < d3a7h> tak 21:27 < d3a7h> wiem 21:28 < d3a7h> ale jak bym dal $skalar = (cos => "tam", e => "g"); 21:28 < d3a7h> to jak dam print to wypisze g 21:28 <@mulander> elementy hasha wywoluje sie w inny sposob. 21:28 <@mulander> $nazwahasha{klucz} 21:28 < d3a7h> tak 21:29 <@mulander> zreszta tak naprawde $skalar = (cos => "tam", e => "g"); powinno zwrocic bledy albo przypisac 'cos' do skalar. 21:29 <@mulander> a najprawdopowdobniej zwroci ilosc elementow lub blad. 21:30 <@mulander> ale narazie chcialem sie skupic na zmiennych skalarnych by nie mieszac ludziom ktorzy z perlem nie mieli stycznosci. 21:30 < d3a7h> ok 21:30 -!- BeOm_ is now known as BeOm|aw 21:30 <@mulander> czy sa jeszcze jakies pytania ? 21:31 < ekim> ja juz nie mam pytan tylko to mnie zaintrygowalo,tnx 21:31 < ant_> mam prosbe 21:31 < ant_> zrob druga czesc za 3 godziny 21:31 < ant_> ;] 21:31 <@mulander> :P to byla ironia ant_ ? :P 21:31 < d3a7h> :-) 21:31 < ant_> mulander: duzo jeszcze do konca zostalo? 21:31 <@mulander> zalezy od was. 21:31 < ant_> ile juz przerobiles? 21:32 <@mulander> zaczalem zmienne skalarne :P 21:32 < d3a7h> narazie skalary przerabia 21:32 < d3a7h> a to poczatek :] 21:32 <@mulander> 1% zmiennych skalarnych 21:32 < d3a7h> hehe 21:32 < d3a7h> :] 21:32 < ant_> bede sobie musial loga przerznac 21:32 <@mulander> postaram sie wiecej przykladow dawac. 21:32 < Astarot> dzisiejszy wyklad konczy sie na zmiennych skalarnych ? 21:32 <@mulander> Astarot zalezy od czasu. 21:33 <@mulander> ale jak pomysle o objetosci zmiennych to mysle ze nie zdazymy list zrobic. 21:33 < d3a7h> chyba ze beda cierpliwi i chetni to zdarzysz 21:33 < d3a7h> :D 21:33 <@mulander> to inna sprawa ;) 21:33 <@mulander> skalary sa wbrew pozorom bardzo wazne 21:34 <@mulander> najczesciej sie z nich korzysta a inne typy sie skladaja ze skalarow. 21:34 < d3a7h> exactly 21:34 <@mulander> jak ktos nie zrozumie skalarow to nie zrozumie list i hashow. 21:34 < d3a7h> :-] 21:34 < d3a7h> mulander a ty masz wogole jakas ksiazke 21:34 < d3a7h> do perla 21:34 <@mulander> z 8/9 po ang. 21:35 <@mulander> najbardziej polecam beginning perl, programming perl oraz perl coockbook 21:35 <@mulander> beginning perl jest za darmo i legalnie do sciagniecia z sieci. 21:35 < d3a7h> ja teraz mam Perl programowanie 21:35 < d3a7h> drugie wydanie 21:35 <@mulander> nieznam polskich pozycji. 21:35 <@mulander> ale to pewno programming perl tlumaczenie. 21:35 < d3a7h> a wogole przerobilem juz Perl COre 21:35 <@mulander> 1114 stron ? 21:35 < d3a7h> tak 21:36 < d3a7h> O'REILLY 21:36 <@mulander> tak, dobra ksiazka. 21:36 < d3a7h> wydawnictwo i pisal to Larry Wall 21:36 < d3a7h> tworca :D 21:36 <@mulander> nie tylko larry wall z tego co pamietam ;) 21:36 < d3a7h> tak bo pisal tez pierwszy mistrz programowania 21:36 < d3a7h> w perlu 21:36 < d0ubl3_j> ekhm mozemy dalej? 21:36 < d3a7h> Cristjanen 21:36 <@mulander> mozemy ;) sorry za offtopa ;) 21:36 < d0ubl3_j> czy to juz koniec? 21:36 < d3a7h> Christjanen :D 21:36 -!- mode/#wyklady [+m] by mulander 21:37 <@mulander> omowilismy po krotce przechowywanie liczb teraz przejdziemy do ciagow znakow, ciag znakow to tak zwany 'string' to sekwencja znakow ( np. "Hello World" o 8 bitowej wartosci z calej tablicy znakow ( 256 wartosci ) 21:39 <@mulander> Najkrotszy ciag znakow oczywiscie nie zawiera zadnych znakow;), jako ze Perl nie wymaga deklaracji wielkosci naszych zmiennych pozwala nam na przechowywanie dowolnie dlugiego ciagu ( ograniczonego jedynie przez pamiec jaka dysponuje nasz komputer, jednak jezeli stworzycie zmienna ktora wypelni cala pamiec to duzo nie popracujecie na kompie ;) bedize cielo jak cholera :P ) 21:40 <@mulander> W perlu mamy kilka metod aby powiedziec interpreterowi iz chcemy zadeklarowac ciag znakow. Do najwazniejszych naleza podwojne cudzyslowia ", pojedyncze ', here-documents oraz qq//. Powiedzmy sobie szerzej o kilku z nich. 21:41 -!- ekim [~ekim88@80.51.229.234] has quit [Ping timeout: 180 seconds] 21:41 -!- BeOm|aw is now known as BeOm|q3 21:42 <@mulander> Na pierwszy ogien wezmy pojedyncze cudzyslowia. Cudzyslowie ktore otacza ciag znakow nie wchodzi w jego sklad ( to dotyczy wszystkich rodzajow cudzyslowi ) wszystkie pozostale znaki znajdujace sie pomiedzy cudzyslowiami sa jego elementami z dwoma wyjatkami, aby umiescic w ciagu otoczonym pojedynczymi cudzyslowiami ( ' ) znak pojedynczego cudzyslowia musimy tak jak w C skorzystac z sekwencji ucieczki czyli poprzedzic znaczek ' backslashem ( \ ) czyli aby wpr 21:42 <@mulander> przyklad 'to jest ciag znakow a to pojedynczy cudzyslow \' i teraz konczymy ciag' 21:43 <@mulander> aby umiescic znak backslash rowniez musimy skorzystac z sekwencji ucieczki czyli poprzedzic backslash backslashem przyklad 'wypisujemy backslash \\ i konczymy ciag' 21:44 <@mulander> Przechodzimy do podwojnych cudzyslowi, w wiekszosci wypadkow dziala jak pojedyncze ale istnieje znacznie wiecej sekwencji. Jezeli ktos programuje w C lub C++ mysle iz znajdzie wszystkie odpowiedniki ucieczek tego jezyka i to prawdopodbnie nie rozniace sie w sposobie wywolania. 21:44 <@mulander> Dla przykladu chcac zapisac w jednym ciagu znakow dwie linijki tekstu zrobimy tak: "to jest pierwsza linia\na to druga linia" sekwencja ucieczki \n oznacza znak nowej lini czyli przejscie do nastepnego wiersza. 21:45 <@mulander> Perl posiada rowniez kilka swoich unikalnych sekwencji takich jak \L ktory zamienia wszystkie znaki na duze litery az natrafi na sekwencje \E 21:46 <@mulander> dla przykladu "\Lmula\Ender" stworzy nam ciag "MULAnder" 21:47 <@mulander> Kolejnym bardzo waznym elementem podwojnego ciagu otoczonego podwojnym cudzyslowiem jest interpolacja zmiennych w nim zawarta, uproszczajac troche sprawe mozemy powiedziec ze nazwa zmiennej podana w podwojnym cudzyslowiu zostanie zamieniona na wartosc przechowywana przez ta zmienna. Mozemy to sprawdzic na nastepujacym przykladzie. 21:47 <@mulander> #!/usr/bin/perl 21:47 <@mulander> use warnings; 21:47 <@mulander> use strict; 21:47 <@mulander> my $nick = "Mulander"; 21:48 <@mulander> print "In the scalar \$nick I hold the string $nick\n"; 21:49 <@mulander> pierwsze wystapienie $nick poprzedzilismy znakiem ucieczki czyli backslashem, co spowodowalo iz $ zostalo potraktowane jak zwykly znaczek dolara a nie oznaczenie typu zmiennej, w drugim wystapieniu pozwolilismy zadzialac interpolacji wiec $nick zostanie zatopiony na ciag znakow "Mulander" w efekcie program wydrukuje tekst "In the scalar $nick I hold the string Mulander" po czym przejdzie do nowego wiersza z powodu sekwencji ucieczki \n ( nowa linia ) 21:50 <@mulander> O interpolacji dokladnie powiemy sobie troche pozniej ( jeszcze przy zmiennych skalarnych ) narazie wspominam o tym tylko poto by bylo jasne co mam na mysli mowiac iz dany sposob deklaracji ciagu podlega interpolacji. 21:51 <@mulander> Nastepnym bardzo fajnym sposobem deklaracji ciagu jest here-document, w ten sposob mozemy zamiescic w zmiennej np. dluzszy tekst w pewien sposob sformatowany dla przykladu 21:51 <@mulander> my $tekst< To co teraz pisze zostanie zapisane w ten sam sposob 21:52 <@mulander> w zmiennej, ten sposob deklaracji rowniez podlega interpolacji 21:52 <@mulander> wszystkie spacje oraz znaki tabulacji zostana zachowane a by przejsc do nowej linie 21:52 <@mulander> nie jestesmy zmuszeni wstawiac sekwencji ucieczki dla znaku nowej lini 21:52 <@mulander> EOF 21:53 <@mulander> w podanym przykladzie wszystko pomiedzy < wazne jest by wspomniec iz zamykajaca sekwencja musi sie pojawic na poczatku linii, nie moze byc przez nic poprzedzona ani zaden znak nie moze sie po niej znajdowac, oczywiscie EOF jest najczesciej uzywany ale mozemy zrobic spokojnie < Powiemy sobie teraz bardzo krotko o deklaracji za pomoca qq//; ten sposob deklaracji dziala prawie identycznie jak podwojny cudzyslow, dlaczego prawie a nie calkiem? poniewaz w podwojnym cudzyslowie znak cudzyslowia musielibysmy poprzedzic sekwencja ucieczki aby zapisac go w ciagu, tutaj nie musimy. Jednak ciag podlega dalej interpolacji i wszystkie inne sekwencje dzialaja w nim w ten sam sposob. 21:55 -!- mode/#wyklady [-m] by mulander 21:55 <@mulander> pytania ? 21:55 -!- sft|- [~superb@cjq161.neoplus.adsl.tpnet.pl] has quit [Ping timeout: 180 seconds] 21:56 < Astarot> chyba nie... 21:56 < phoenix> nie 21:56 < phoenix> mulander: przyklady 21:56 < phoenix> i omowieni9e tego 21:56 < phoenix> za bardzo powiazale to 21:56 <@mulander> phoenix ktory element ? 21:56 < sulfur> phoenix: do czego ty chcesz przyklad? 21:58 -!- BeOm|q3 is now known as BeOm| 21:58 <@mulander> pytanie: ile osob dalej jest obecnych ? :) 21:58 < Astarot> do ktorej trwa wyklad ? czy raczej nie ma ograniczen czasowych ;> ? 21:58 < d0ubl3_j> mulander: szczerze 21:58 < d0ubl3_j> zaczynasz przynudzac ;> 21:58 < d0ubl3_j> wiecej zycia ;> 21:58 <@mulander> Ast3rot optymalnie 00:00 moge wczesniej skonczyc ;) 21:58 <@mulander> d0ubl3_j brakuje mi wprawy ;P i mialem ciezki dzien ale sie postaram :P 21:59 < d0ubl3_j> mulander: dawaj malo tresic 21:59 < d0ubl3_j> potem przyklad 21:59 < Astarot> Astarot* ;) 21:59 < d0ubl3_j> i znowu 21:59 <@mulander> d0ubl3_j okis ;) 21:59 < d0ubl3_j> bo takie dlugie txt nudza ;> 21:59 < d0ubl3_j> ok let's go ;> 21:59 <@mulander> tylko chce uslyszec od phoenix ktory fragment jest nie zrozumialy. 22:01 <@mulander> rozumiem ze phoenix jest albo idle albo nie ma juz pytan wiec kontynuujemy. 22:01 -!- mode/#wyklady [+m] by mulander 22:01 <@mulander> Zrobimy maly skok i wrocimy do liczb, omowimy sobie teraz operatory dzialajace na zmiennych zawierajacych liczby. 22:03 <@mulander> Wiekszosc jest bardzo prosta i latwa do przewidzenia w dzialaniu podstawowe operatory to +, -, *, /, **, % omowmy kazdy z nich na prostych przykladach. 22:04 <@mulander> nie wspomnialem iz w perlu mozna pisac jedno linijkowce, dzieki nim kazdy moze na szybko przetestowac poszczegolne operatory, wystarczy wpisac w powloce perl -e 'tutaj kod programu' aby interpreter wykonal polecenia pomiedzy cudzyslowiami ( mozna uzyc podwojnych a pod windowsem nawet trzeba :/ ) 22:05 <@mulander> perl -e "print 5+5;" # operator dodawania zwraca sume dwoch liczb, funkcja print w tym wypadku wydrukuje nam wynik na ekranie czyli 10. 22:05 -!- sft|- [~superb@ciy151.neoplus.adsl.tpnet.pl] has joined #wyklady 22:05 <@mulander> perl -e 'print 12-2' # operator odejmowania jako wynik powinnismy otrzymac 10 22:05 <@mulander> perl -e 'print 2*2;' # mnozenie, wynik 4 zostanie wydrukowany. 22:06 <@mulander> perl -e 'print 4/2;' # operator dzielenia wynik 2 22:06 <@mulander> perl -e 'print 2**2;' # operator potegowania, 2 do potegi drugiej 4. 22:06 <@mulander> perl -e 'print 10%3;' # operator modulo zwraca nam reszte z dzielenia w tym wypadku 1 22:07 <@mulander> Wszystkie te operatory z wyjatkiem potegowania maja praktycznie taki sam odpowiednik w C/C++. 22:08 <@mulander> Oczywiscie wszystkie te operacje mozemy rowniez przeprowadac na liczbach zmienno przecinkowych, ujemnych i wszystkich dostepnych w perlu. 22:09 <@mulander> Oczywiscie uzywamy tutaj funkcji print by na szybko przekonac sie o dzialaniu danego operatora nic nie stoi na przeszkodzie by zrobic my $wynik = ((5 + 15)*(2**2))/3; nawiasy wymuszaja odpowiednio kolejnosc wykonywania dzialan. 22:10 <@mulander> jezeli chodzi o pierwszenstwo dzialania danych operatorow, jest ono takie samo jak uczyli was na matematyce w szkole, wiec nie bede sie o tym rozpisywal, tak samo zreszta dziala wymuszanie kolejnosci poprzez nawiasy. 22:11 <@mulander> Powiedzielismy wczesniej co to jest prawda i falsz, teraz poznamy operatory logiczne, ktore jako wynik swojego dzialania nie zwracaja przeliczonej wartosci np. 5+5 zwraca nam wartosc 10, operator logiczny zwroci nam prawde albo falsz, czyli w 0 ( falsz ) albo 1 ( prawda ) 22:11 <@mulander> do takich operatorow logicznych ktore dzialaja na liczbach zaliczami <,<=,==,>=,>,!= 22:12 <@mulander> wykonajmy sobie teraz pare bardzo abstrakcyjnych testow ktore raczej sie nie wykorzystuje w taki sposob ale posluzy nam to do zrozumienia dzialania tych operatorow. 22:12 <@mulander> my $tf = 2 < 4; # w zmiennej $tf mamy teraz wartosc 1 czyli prawde poniewaz 2 jest mniejsze od 4 22:13 <@mulander> my $tf = 2<2 # w zmiennej $tf mamy teraz 0 czyli falsz poniewaz 2 nie jest mniejsze od 2 22:13 <@mulander> my $tf = 2<=2; # prawda czyli 1 poniewaz 2 jest rowne 2 pomimo iz nie jest od niego mniejsze. 22:14 <@mulander> my $tf = 2<=1; # falsz dwa nie jest ani wieksze ani rowne 1 wiec w $tf mamy wartosc 0 22:14 <@mulander> my $tf = 1==1 ; # prawda 1 jest rowne 1 wiec wartosc $tf jest rowna 1. 22:15 <@mulander> my $tf 1>=5; # 0 czyli falsz poniewaz 1 nie jest ani wieksze ani rowne 5. 22:15 <@mulander> my $tf = 5 >= 5; # prawda czyli 1 poniewaz 5 jest rowne 5 pomimo ze nie jest wieksze. 22:15 <@mulander> my $tf = 5!=5; # falsz poniewaz 5 nie jest ROZNE od 5. 22:16 -!- crook [~cr00k@crook.the.master] has quit [Quit: umarlem, pogrzebu nie bedzie] 22:16 <@mulander> my $tf = 5!=4; # prawda 5 jest rozne od 4. 22:16 -!- mode/#wyklady [-m] by mulander 22:16 <@mulander> pytania ? 22:16 < d3a7h> nie :D 22:16 < Astarot> chyba nie... 22:16 < d3a7h> chyba ze moglbys powiedziec o innych operatorach im 22:16 < Astarot> te operatory logiczne maja chyba jeszcze jakis odpowiednik literkowy ;P 22:17 <@mulander> Astarot to przy operatorach ciagow znakow za chwile ;) 22:17 < d3a7h> typu zmiana liter nastepny znak 22:17 < Astarot> nie o to mi chodzilo ;P 22:17 <@mulander> Astarot a dokladnie oco ? 22:17 <@mulander> d3a7h zmiana liter nastepny znak masz na mysli sekwencje ucieczki dla podwojnego cudzyslowia ? 22:18 < d3a7h> tzn. 22:18 < d3a7h> ++++++++++++++++++++++++++++++++++++++++++ 22:18 < d3a7h> |Oper. w Perlu| Opis | 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> | \l | Nastepny znak mala litera| 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> | \L |Reszta znakow malymi liter| 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> | \u | Nastepny znak duza litera| 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> | \U |Reszta znakow duza literam| 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> | \E | Przerywa dzialanie oper. | 22:18 < d3a7h> |_____________|__________________________| 22:18 < d3a7h> cos w tym stylu :] 22:18 < Astarot> ehh, sorry senny jestem, wlasnie o tekstowe mi chodzilo lt,gt itp. 22:18 < d3a7h> :-) 22:19 <@mulander> d3a7h moglbym o tym mowic ale kazdy moze to przeczytac w perldoc -f sprintf 22:19 < d3a7h> jak ktos chce moge taka tabelke wkleic o eq lt 22:19 <@mulander> a to poruszymy dokladnie przy formatowaniu danych. 22:19 < d3a7h> itp. zebys sie nie meczyl 22:19 <@mulander> d3a7h zaraz powiem o eq itc, przy ciagach. 22:19 <@mulander> i dlaczego sa rozne operatory do ciagow i liczb. 22:19 < Gynvael> mulander: co do != jako falsz 22:19 < Gynvael> mulander: w perlu mozna jak w pascalu robic ? 22:19 < Gynvael> tzn a<>b ? 22:19 < Astarot> <> ? 22:20 <@mulander> gynvael <> ma swoje wlasne znaczenie w perlu. 22:20 < d3a7h> nie 22:20 < Gynvael> aha 22:20 < Gynvael> thx 22:20 <@mulander> niewiem jakie znaczenie ma w pascalu. 22:20 < Astarot> <> rozne od 22:20 < d3a7h> w pascalu <> rozne 22:20 < d3a7h> :] 22:20 < Gynvael> mulander: hmm 22:20 < Gynvael> mulander: 10/3 w perlu to 3 czy 3.333333 ? 22:21 <@mulander> 3.3333333333 22:21 < Gynvael> mhm 22:21 < d3a7h> :> 22:21 < Gynvael> thx 22:21 < d3a7h> Gyn jak chcesz mozesz wpisac w atermie 22:21 < d3a7h> perl -e 'print 10/3'; 22:21 < d3a7h> i sprawdzic 22:21 <@mulander> chyba ze wymusisz inta, np. print int 10/3; 22:21 < d3a7h> mowil to wyzej mulander 22:21 < Gynvael> d3a7h: moge ;> ale moge tez zapytac; > 22:21 < d3a7h> :-) 22:21 < Gynvael> mulander: o ;> 22:21 < Gynvael> ciekawe 22:21 <@mulander> ;) 22:21 < Gynvael> mulander: a int 10 / int 3 22:22 < Gynvael> mulander: to bedzie ile ?;> 22:22 < Gynvael> mulander: mozna tak wogole ? 22:22 < d3a7h> 3 22:22 < d3a7h> :D 22:22 <@mulander> Gynvael ciebie pewno zainteresuje, cos takiego perl -e 'print rand(100);' 22:22 < d3a7h> to losowa liczba 22:22 -!- Ascon [~Ascon@ais151.neoplus.adsl.tpnet.pl] has quit [Read error: Connection reset by peer] 22:23 <@mulander> d3a7h drobna poprawka, losowa liczba zmienno przecinkowa. 22:23 < d3a7h> tak 22:23 < d3a7h> bo nie ma int :-) 22:23 <@mulander> :) 22:23 < d3a7h> tzn. calkowita jest jak jest int 22:23 <@mulander> dlatego wspominalem wczesniej by na to uwazac. 22:23 < d3a7h> :] 22:23 < d3a7h> bylem z psem :( 22:23 < d3a7h> hehe 22:23 < Gynvael> o 22:23 < Gynvael> ciekawe 22:23 < Gynvael> ;> 22:23 < d3a7h> ale kojarze 22:23 <@mulander> jezeli chodzi o int, on tylko konwertuje float na int. 22:24 <@mulander> wiec to nie jest praca na liczbach calkowitych. 22:24 < d3a7h> heh 22:24 < d3a7h> jak dam int rand(100) to jest na liczbach Naturalnych 22:24 < d3a7h> bo od 0 lub 1 22:24 <@mulander> taki przyklad print -e 'int(-6.725/0.025);" 22:24 < d3a7h> ;] 22:25 <@mulander> i to pokazuje ze sprintf i printf duzo lepiej zaokragla niz int ;) 22:25 <@mulander> ale to taka ciekawostka dla gynvaela :P 22:25 < Gynvael> ;> 22:25 < Gynvael> ciekawe ;> 22:26 <@mulander> to przechodzimy do operatorow na ciagach czy ktos ma jeszcze pytanka ? 22:27 < d3a7h> ni ma :] 22:27 <@mulander> to lecimy ;) 22:27 -!- mode/#wyklady [+m] by mulander 22:28 <@mulander> mialem zaczac od innego operatora ale poniwaz padla juz wzmianka o eq itc, to zaczne wlasnie od tego. 22:28 <@mulander> otoz operatory logiczne dla ciagow sa odpowiednikami operatorow logicznych dla liczb, ktos zapyta wiec dlaczego ich uzywac. 22:29 <@mulander> otoz operatory dla liczb lub ciagow uzyte w innym kontekscie niz ich przeznaczenie beda dawac dla nas bardzo dziwne wyniki, ale najpierw wymienmy sobie odpowiedniki danych operatorow. 22:29 <@mulander> operator liczb: < w stringach to: lt ( skrot od less than ) 22:29 <@mulander> <= to le czyli less or equal 22:29 <@mulander> == to eq czyli equal 22:29 <@mulander> >= to ge czyli greater or equal 22:30 <@mulander> > to gt czyli greater than 22:30 <@mulander> i na koncu != to ne czyli not equal 22:30 <@mulander> Teraz jak to dziala i z czym to sie je ? 22:30 <@mulander> Najlepiej pokaze wam to pewien przyklad dlaczego stosowac dany operator tylko dla swojego typu danych. 22:31 <@mulander> wykonajcie u siebie takiego jedno linijkowca. 22:31 -!- ekim [~ekim88@80.51.229.234] has joined #wyklady 22:31 <@mulander> perl -e 'print "prawda" if 7<30;' 22:32 <@mulander> oczywiscie uzyskamy wartosc prawda, poniewaz numerycznie 7 jest mniejsze od 30. 22:32 <@mulander> a teraz wpisujemy 22:32 <@mulander> perl -e 'print "prawda" if 7 lt 30;' 22:32 <@mulander> i co sie dzieje? program nic nie pisze, wiec dostalismy falsz. Jak to mozliwe ? 22:33 <@mulander> Otoz trzeba wspomniec ez liczbowe operatory logiczne sprawdzaja ladnie wartosci 22:33 <@mulander> a operatory porownania dla ciagow spradzaja wartosci ascii poszczegolnych znakow wiec zanalizujmy drugiego jedno linijkowca. 22:34 <@mulander> Jak wiemy perl automatycznie konwertuje zmienne zaleznie od kontekstu ( o kontekscie kiedy indziej ;) ), lt wymusza konwersje na ciag znakow wiec 7 jest zamienione na "7" a 30 na "30" 22:34 <@mulander> Teraz porownajmy te dwa ciagi w ascii. 22:35 <@mulander> sprawdzamy pierwszy znak kazdego ciagu. 7 w ascii ma wieksza wartosc niz znak 3 w ascii wiec nie 7 nie jest mniejsze od 3, czyli cale wyrazenie zwraca falsz nie sprawdzajac kolejnego znaku. 22:35 -!- mode/#wyklady [-m] by mulander 22:35 <@mulander> zrozumiale ? :) 22:36 < Astarot> narazie tak ;) 22:36 < d3a7h> jasne 22:36 <@mulander> To jest wlasnie cala roznica miedzy tymi operatorami. 22:36 <@mulander> liczbowe sprawdzaja wartosci tak jak czlowiek. 22:36 < d3a7h> a pytanie 22:36 <@mulander> widzi liczbe 7 i sprawdzi czy jest mniejsza od liczby 30. 22:36 <@mulander> slucham. 22:36 < d3a7h> jak bym dal w "7" 22:36 < d3a7h> i "30" to tez nie pojdzie 22:37 <@mulander> efekt bedzie taki sam. 22:37 < d3a7h> pujdzie* nie wiem jak to sie pisze :D 22:37 < d3a7h> ok 22:37 <@mulander> jedyna roznica jest taka ze interpreter nie bedzie musial zamieniac 7 na "7" i 30 na "30" 22:37 <@mulander> bo zrobiles to za niego. 22:38 < d3a7h> aha 22:38 <@mulander> operatory logiczne ciagow spradzaja wartosci poszczegolnych znakow ciagow. 22:38 <@mulander> a nie calych liczb. 22:38 <@mulander> i tutaj latwo popelniac bledy jezeli sie na to nie uwaza. 22:39 <@mulander> wyobrazcie sobie nasz przyklad 7 lt 30 22:39 <@mulander> jezeli to jest wazny warunek dla funkcji if w waszym programie 22:39 <@mulander> napisaliscie lt poniewaz latwiej wam bylo zapamietac niz < 22:39 < Gynvael> mulander: hm a to mozemyu pisac 7 lt 30 ? nie mozemy "7" lt "30" or sth ? 22:39 < Gynvael> *tzn nie musimy 22:40 <@mulander> Gynvael zmierzalem do czegos innego. 22:40 < Gynvael> gomen 22:40 < Gynvael> ;> 22:40 <@mulander> chodzi oto iz ludzie przez przypadek korzystaja z opeartorow logicznych ciagow jako mnemonikow do operatorow logicznych liczb. 22:40 <@mulander> poprostu z poczatku jest bledne mniemanie iz sa to aliasy dla operatorow logicznych liczb. 22:40 < Gynvael> mhm 22:40 < Gynvael> ;> 22:40 < Gynvael> kk 22:41 <@mulander> i w ten sposob ktos pisze 7 lt 30 i sie dziwi dlaczego zwraca falsz. 22:41 <@mulander> zasada jest prosta porownujes liczby uzywaj operatorow logicznych liczb, ciagi to operatory ciagow. 22:42 <@mulander> tak samo mozna miec problemy robiac "7mulander" < "30mulander" 22:42 <@mulander> 7mulander zostanie zamienione na 7 a 30mulander na 30 22:42 <@mulander> poniewaz operatory logiczne liczb wymuszaja kontekst liczbowy. 22:43 <@mulander> czyli automagiczna konwersje ciagu na liczby. 22:43 <@mulander> a perl to konwertuje w dosc dziwny sposob ;) 22:43 <@mulander> o czym powiem troche pozniej. 22:43 <@mulander> dobra, mozemy kontynuuowac ? 22:43 -!- _diabel_ [APb4p0FS@rejon101.ztpnet.pl] has joined #wyklady 22:43 < _diabel_> re 22:43 < _diabel_> ;] 22:43 <@mulander> elo ;) 22:44 < Gynvael> yep 22:44 < Gynvael> mozemy imho 22:44 -!- mode/#wyklady [+m] by mulander 22:44 <@mulander> skoro mamy operatory logiczne za soba przejdzmy do dwoch ciekawych operatorow ciagow. 22:45 <@mulander> Zaczniemy od operatora wielokrotnosci ciagu, jest to zwykla literka x 22:45 -!- d3a7h [~d3a7h@cpz144.neoplus.adsl.tpnet.pl] has quit [Quit: Bye] 22:45 <@mulander> mozecie sprawdzic jego dzialanie wpisujac w powloce: perl -e 'print "baam"x2;' 22:46 <@mulander> jak zawazycie na ekranie wypiszemy baambaam czyli 2 razy ten ciag. 22:46 -!- Astarot [hjkhhjkhg@bie141.neoplus.adsl.tpnet.pl] has quit [Client Quit] 22:46 [Users #wyklady] 22:46 [@mulander ] [ Ast3rot ] [ d0ubl3_j ] [ Gynvael ] [ phoenix ] [ sft|- ] 22:46 [ _diabel_ ] [ b3x ] [ ekim ] [ Malcolm ] [ qqq ] [ sulfur ] 22:46 [ Annihilator] [ BeOm| ] [ furiosan_ ] [ MEAL ] [ rainrider ] [ ZeroZero1] 22:46 [ ant_ ] [ blizzard] [ G0blin`c0d3] [ Nekrataal^AW] [ RektorWydzialuPerla] 22:46 -!- Irssi: #wyklady: Total of 23 nicks [1 ops, 0 halfops, 0 voices, 22 normal] 22:47 <@mulander> w brew pozorom jest to bardzo przydatna sprawa, szczegolnie jezeli chcecie zaoszczedzic sobie pisania, np. powiedzmy ze wiecie iz szerokosc ekranu to 56 i checie wydrukowac kreske skladajaca sie ze znaczka - mozecie napisac print "----------.... i tak do 56 albo print "-"x56; sami widzicie roznice ;) 22:47 <@mulander> oczywiscie liczba po x moze byc zmienna np. print '-'x$szerokosc_ekranu; 22:47 <@mulander> co daje juz bardzo fajne mozliwosci. 22:48 <@mulander> Drugim operatorem ktory przydaje sie przy ciagach jest . czyli zwykla kropka, fachowo nazywa sie to operator konkantenacji, a po ludzku, laczenia ciagow. 22:48 <@mulander> i teraz maly przyklad: 22:48 <@mulander> #!/usr/bin/perl 22:48 <@mulander> use warnings; 22:48 <@mulander> use strict; 22:49 <@mulander> my $raz = 'mul'; 22:49 <@mulander> my $dwa = "ander"; 22:49 <@mulander> my $trzy = $raz . $dwa; 22:49 <@mulander> print $trzy; 22:49 <@mulander> oczywiscie mozemy spokojnie olac $raz i $dwa robiqac $trzy = 'mul' . "ander"; 22:50 <@mulander> operator ten w brew pozorom przydaje sie bardzo czesto, np. korzystamy z pojedynczego cudzyslowia by uniknac wielu sekwencji ucieczek ale na koncu chcemy przejsc do nowej lini wiec mozemy zrobic tak: 22:50 <@mulander> print 'Piszemy sobie tekt z dziwnymi znaczkami np. $ @ % nie muszac uciekac za pomcoa backslasha i przechodzimy do nowej linii' . "\n"; 22:51 -!- mode/#wyklady [-m] by mulander 22:51 <@mulander> pytania? i czy ktos jeszcze nie zasnal ? :P 22:51 -!- sulfur [~sulfur@213.199.204.33] has quit [Quit: User pushed the X - because it's Xtra, baby] 22:51 < Gynvael> fajne ;> pytan brak 22:52 <@mulander> Gynu wytrwaly jeszcze nie spi ;) 22:52 < Gynvael> ;> 22:52 <@mulander> Zostalo nam jeszcze z 15-20% zmiennych skalarnych. 22:52 < _diabel_> ja mam pytanie 22:52 <@mulander> pytanie do was ( tych co nie spia oprocz gyna ;P ) kontynuowac czy dokonczyc nastepnym razem ? 22:52 < _diabel_> przesle mi ktos pozadnego loga 22:52 < _diabel_> ? 22:53 < _diabel_> kontuowac 22:53 < _diabel_> ale 22:53 < _diabel_> po okolo 1 w nocy 22:53 < Gynvael> _diabel_: bedzie na stronce 22:53 < _diabel_> bo starzy mi jecza 22:53 < _diabel_> zebym kompa wylaczyl 22:53 <@mulander> _diabel_ wyklady mam jutro :P 22:53 < _diabel_> ja chce znac caly C i Perl 22:53 < Gynvael> _diabel_: tylko wyklad sie skonczy to na www (ta z topicu) wrzuce 22:53 < _diabel_> a potem Python 22:54 -!- draye [~draye@80.51.174.5] has joined #wyklady 22:55 < ekim> nie wiem mulander moze na dzis juz dosc, ja z deka zmeczony jestem choc i tak czesc wykladu stracilem bo mi net padl 22:55 <@mulander> to zalezy od was, ja tego nie robie dla siebie ;) 22:55 < _diabel_> 22:55 < ekim> a reszta chyba spi;> 22:56 < _diabel_> Perl spoko 22:56 < _diabel_> C spoko 22:56 < _diabel_> Python spoko 22:56 < _diabel_> Bash spoko 22:56 < _diabel_> Windows sux 22:56 < Gynvael> _diabel_: windows spoko 22:56 < Gynvael> ;> 22:56 <@mulander> Dobra to rozmawiajac z kilkoma osobami wniosek taki: kontynuuacja nastepnym razem. 22:56 < ekim> yep 22:56 < ekim> tylko kiedy? 22:56 < _diabel_> ok. to kiedy ? 22:56 <@mulander> a teraz juz offtop, chetnie teraz uslysze krytyke i sugestie. 22:56 < Gynvael> mulander: widzisz wolne terminy 22:56 <@mulander> ekim kiedy wam pasuje ? 22:56 < Gynvael> a ja wrzucam loga 22:56 < Gynvael> na serv