[08:13pm] <@mulander>
Witam ponownie na trzeciej czesci wykladow o Perl'u ;)
[08:13pm]
<@mulander> jak zwykle w malym gronie a pod koniec
zapewne jeszcze mniejszym :P
[08:14pm] <@mulander>
Dzisiaj mamy wplanie przerobic dwa zagadnienia, o ile wszystko pojdzie sprawnie
to powinno to nam sie udac.
[08:14pm] <@mulander> na
pierwszy ogien pojda tablice asocjacyjne czyli hashe
[08:14pm]
<@mulander> a jak czas pozwoli to przerobimy instrukcje
warunkowe i petle.
[08:15pm] <@mulander> I na tym
koncze przynudne wstepy i przechodze do bardziej nudnej tresci ^^
[08:15pm]
<@mulander> Poznalismy juz dwa typy zmiennych, zmienne
skalarne oznaczane znaczkiem $ oraz tablice oznaczane znaczkiem @
[08:15pm]
<@mulander> poniewaz programisci perla lubia takie
znaczki to stwierdzili ze dwa to stanowczo zamalo i wymyslili sobie uzycie
jeszcze jednego.
[08:16pm] <@mulander> ale o tym
znaczku za chwile, najpierw troche teorii :P
[08:16pm]
<@mulander> I krociotkie przypomnienie.
[08:16pm]
<@mulander> Zmienna skalarna: przechowuje nieokreslony
rodzaj danych - moze to byc ciag znakow, liczba i tak dalej.
[08:17pm]
<@mulander> Tablica: to uporzadkowane dane skalarne,
czyli na upartego mozemy powiedziec ze tablica sklada sie ze zmiennych
skalarnych ponumerowanych od zera w gore.
[08:17pm]
<@mulander> Tablica Asocjacyjna to pewien rodzaj
zmiksowania tych dwoch struktur ;)
[08:18pm]
<@mulander> Jako ze programisci perla sa leniwi, to
stwierdzili ze zamiast pisac associative array, wygodniej sie pisze hash :P i my
tez jestesmy leniwi wiec tak samo bedziemy robic.
[08:18pm]
<@mulander> tak wiec hash: to zmienna ktora przechowuje
zestaw par kluczy i wartosci.
[08:18pm] <@mulander>
wyjasnijmy to sobie bo moze to byc dla niektorych nie zrozumiale.
[08:19pm]
<@mulander> do hasha wrzucamy klucz i wartosc, klucz to
ciag znakow dzieki ktoremu nam latwiej odnosic sie do danego elementu hasha (
nie musimy zgadywac numerka tak jak to jest przy tablicy ;) ) tylko wpisujemy
ciag ktory wczesniej zdefiniowalismy
[08:20pm]
<@mulander> zas interpreter wie ze dana parka jest ze
soba powiazana, i kiedy poprosimy go o wartosc danego klucza to on bez wiekszych
problemow nam ja odnajdzie i zwroci.
[08:20pm]
<@mulander> mozemy sobie pomyslec jak wygladalby taki
przykladowy hash
[08:21pm] <@mulander> zalozmy ze
robimy liste najlepszych wynikow z zadanek ;)
[08:21pm]
<@mulander> jezeli chwilke pomyslimy to dojdziemy do
wniosku ze najlepszym wyjsciem bedzie podanie imion osob ktore sa na top10 jako
kluczy
[08:21pm] <@mulander> i kazdy klucz bedzie
wskazywal na ilosc punktow zdobyta przez dana osobe
[08:22pm]
<@mulander> wtedy latwo i szybko mozemy poznac wyniki
danej osoby.
[08:22pm] <@mulander> ale ze teoria jest
zwykle zbyt nudna i malo zrozumiala ;) zaczne od drobniutkiego przykladu
[08:22pm] <@mulander> ale to troszeczke pozniej
najpierw pytanka :P
[08:22pm] <@mulander> hmm
rozumiecie narazie ?
[08:23pm]
narazie gites
[08:23pm]
jedziesz dalej
[08:23pm]
czekaj
[08:23pm]
<@mulander> tak ?
[08:23pm]
czy jeden klucz moze miec kilka tych parametrow?
[08:23pm] np. bedzie kilka
dziedzin zagadek
[08:23pm]
matematyka i fizyka
[08:24pm] i do imienia beda przypisane dwa
wyniki
[08:24pm] moze tak
byc?
[08:24pm] <@mulander> to potrzebujesz
hasha zawierajacego tablice ;)
[08:24pm] <@mulander>
da sie cos takiego zrobic dzieki referencja ;)
[08:24pm]
rozumiem, no to dawaj dalej ;)
[08:24pm]
<@mulander> mozesz miec nawet hash zawierajacy hashe
zawierajace tablice skladajace sie z hashy ktore zawieraja hashe
[08:24pm]
<@mulander> i tak dalej :>
[08:24pm] heh
[08:25pm]
<@mulander> ale narazie nie zaprzatajcie sobie glowy
referencjami :P
[08:25pm] <@mulander> dodam jeszcze
tylko kilka rzeczy ktore powinniscie wiedziec o hashach.
[08:25pm]
<@mulander> hmm bede pisal haszach :P
[08:25pm]
<@mulander> 1. klucze w hashu musza byc unikatowe, czyli
nie mozemy miec dwoch identycznych kluczy.
[08:26pm]
<@mulander> wartosci jednak nie maja takiej restrykcji ;)
[08:26pm] <@mulander> kolejna wazna sprawa, dane
przechowywane w haszu sa przechowywane w nieokreslonej kolejnosci.
[08:26pm]
<@mulander> to znaczy interpreter je sobie uklada tak by
miec do nich szybki dostep
[08:27pm] <@mulander> ale
to sie praktycznie nigdy nie bedzie zgadzac z kolejnoscia z jaka my te dane
wprowadzilismy
[08:27pm] <@mulander> mozna uzywac
modulow takich jak IxHash albo DB_file by wymusic pewna kolejnosc ale bardzo
duzym kosztem wydajnosci.
[08:28pm] <@mulander> mozna
sobie hasha posegregowac wyciagajac z niego dane ale o tym pozniej.
[08:29pm] <@mulander> przehodzimy teraz do
konkretnych rzeczy zwiazanych z perlem.
[08:29pm]
<@mulander> hash w perlu ma przyporzadkowany znaczek %
[08:30pm] <@mulander> sposob nazywania jest taki jak
przy innych zmiennych
[08:30pm] <@mulander>
najprostsza deklaracja zmiennej typu hash to:
[08:30pm]
<@mulander> my %hash;
[08:30pm]
<@mulander> jednak moze sie zdarzyc ( dosyc czesto ) ze
juz przy samej deklaracji bedziemy chcieli przypisac jakies wartosci do hasha.
[08:30pm] <@mulander> mozemy to zrobic na dwa sposoby
( trzy ale o trzecim za chwile )
[08:31pm]
<@mulander> sposob 1:
[08:31pm] <@mulander> my %hash =
("mulander", "100pkt", "ktos", "200pkt");
[08:31pm]
<@mulander> zadeklarowalismy w tym momencie
[08:31pm]
<@mulander> dwa elementy hasha
[08:32pm]
<@mulander> widzicie pewnie 4 elementy i byc moze
niektorym sie to miesza z listami i tablicami.
[08:32pm]
<@mulander> ale pamietacie jak mowilem ze perl pobiera
parki klucz/wartosc ?
[08:32pm] <@mulander> to jak
pomyslimy to mulander = klucz a 100pkt bedzie wartoscia powiazana z tym kluczem
[08:32pm] <@mulander> to samo z ktos = klucz i 200pkt
= wartosc tego klucza
[08:32pm] <@mulander> jednak
sposob ten jest dosyc niewygodny.
[08:33pm]
<@mulander> a ze programisci perla bardzo lubia
upraszczac sobie zycie.
[08:33pm] <@mulander> wiec
wymyslili drugi sposob:
[08:33pm]
<@mulander> my %hash = (
[08:33pm]
<@mulander> mulander => "100pkt",
[08:33pm]
<@mulander> ktos => "200pkt",
[08:33pm]
<@mulander> );
[08:33pm]
<@mulander> wooo split ;)
[08:33pm]
<@mulander> zainteresowanych nie wyrzucilo ?
[08:34pm] ;]nie
[08:34pm] nie^^
[08:34pm] muf mulander muf
[08:34pm] hehe
[08:34pm] tzn pisz
[08:34pm] <@mulander> hmm karql i kamil
polecieli :>
[08:34pm] a sa
jakies ograniczenia
[08:34pm] <@mulander>
Reqamst w czym ograniczenia ?
[08:34pm]
do znakow w kluczu
[08:34pm]
<@mulander> nie spotkalem sie jeszcze z takim ;)
[08:35pm] <@mulander> ale jezeli bedziesz chcial
klucz ze spacja w srodku
[08:35pm] <@mulander> to
zamiast
[08:35pm] <@mulander> mulander => "cos",
[08:35pm] <@mulander> piszesz
[08:35pm] nie ma ograniczenia co do wielkosc?
[08:35pm] <@mulander> "mul ander" => "cos",
[08:35pm] ale chyba długosc
klucza ma wplyw na wydajnosc
[08:35pm]
wielkosci*?
[08:35pm]
<@mulander> zlyZwierz owszem na wydajnosc i na wydajnosc
programisty ( dokladnie jego pamieci :P )
[08:35pm]
<@mulander> dlatego przewaznie jako klucz stosuje sie
krotkie wyrazy
[08:35pm] <@mulander> np. admin_nick
=> 'nick',
[08:36pm] <@mulander> w 99.9% wypadkach
takie klucze wystarczaja
[08:36pm] <@mulander> i sa
wygodne.
[08:36pm] a ma jakies
ograniczenie
[08:36pm] co do
ilosci kluczy
[08:36pm] <@mulander> w3b tylko
ograniczenie pamieci twojego komputera
[08:36pm]
<@mulander> mozesz wepchnac tyle kluczy ile ci sie
podoba.
[08:36pm] tak podejrzewalem
[08:36pm] ale hardcore
[08:36pm] kurde nie wiem co
sie dzieje bo split byl
[08:36pm]
i cala lodz poszla
[08:36pm]
<@mulander> to lecimy dalej ?
[08:36pm] nio^^
[08:36pm]
<@mulander> wracajac do drugiego sposobu
[08:37pm] <@mulander> my %hash = (
[08:37pm] <@mulander> mulander => "100pkt",
[08:37pm] <@mulander> ktos => "200pkt",
[08:37pm] <@mulander> );
[08:37pm]
<@mulander> w ladny i wygodny sposob zadeklarowalismy
sobie dwa klucze
[08:37pm] <@mulander> oczywiscie
przy takiej ilosci kluczy moglbym rownie dobrze napisac
[08:38pm]
<@mulander> my %hash = ( mulander => "100pkt", ktos
=> "200pkt" );
[08:38pm] <@mulander> ale przy
wiekszej ilosci dodajemy sobie te nowe linie poto by nam programistom leniwym
sie lepiej czytalo :P
[08:38pm] <@mulander> kolejny
sposob ten trzeci na deklaracje hasha to autovivikacja ( ang. autovivication )
[08:38pm] <@mulander> czyli deklarujemy sobie nasz
hash.
[08:38pm] <@mulander> my %hash;
[08:39pm]
<@mulander> i teraz mozemy dodac te dwa elementy.
[08:39pm] <@mulander> $hash{mulander} = "200pkt";
[08:39pm] <@mulander> $hash{ktos} = "200pkt";
[08:39pm] <@mulander> zostana one automatycznie
powolane do zycia.
[08:39pm] <@mulander> jak pewnie
zauwazyliscie
[08:39pm] <@mulander> kiedy odnosimy
sie do JEDNEGO elementu hasha uzywamy znaczka $ a nie %.
[08:39pm]
<@mulander> i w przeciwienstwie do tablic uzywamy
nawiasow klamrowych { } zamiast okraglych ( )
[08:40pm]
<@mulander> pytania ?
[08:40pm]
mozesz pokazac ten pierwszy
[08:40pm] bo mowie ze split byl i wszystko
poszlo;/
[08:40pm] ja mam
jedno^^
[08:40pm] a na
shellu tez mialem na lodzi
[08:40pm]
<@mulander> Karql pierwsza metoda: my %hash =
("mulander","100pkt","ktos","200pkt");
[08:40pm]
moge?
[08:40pm]
<@mulander> w3b pytaj
[08:40pm]
to wtedy bedzie $hash[1]?
[08:40pm] czy mozna pobrac losowy klucz z
hasha?
[08:40pm] bez klucza
tak
[08:40pm] ?
[08:41pm] w3b mozna
[08:41pm] :D
[08:41pm] thx
[08:41pm] ^^
[08:41pm] int(rand(zakres))
[08:41pm] <@mulander> karql nie bedzie
$hash[1] tylko $hash{mulander}
[08:41pm] <@mulander>
poniewaz dodalismy 2 elementy
[08:41pm] <@mulander> 2
parki dokladnie
[08:41pm] aha widze
[08:41pm] to juz lepiej z
tym =>
[08:42pm] a jak
[08:42pm] z tego drugiego
wyciagalo sie wartosc
[08:42pm] <@mulander> z
czego drugiego ?
[08:43pm] sposobu
[08:43pm] tego co pisalo sie
pod spodem
[08:43pm]
$wart=$hash{klucz} ?
[08:43pm]
<@mulander> zlyZwierz dokladnie
[08:43pm] thx
[08:43pm]
<@mulander> czegos takiego jak $hash[1] NIEMA!
[08:43pm] <@mulander> to jest wywolanie elementu z
tablicy.
[08:44pm] chyba ze
klucze nazwiesz cyframi ;]
[08:44pm]
ale wtedy nie oznaczają one kolejnosci w hashu tylko
nazwę ;]
[08:44pm]
dobrze kombnuje ?
[08:45pm]
<@mulander> zlyZwierz nawet jak nazwiesz cyframi
[08:45pm] <@mulander> to bedzie $hash{1} a nie
$hash[1]
[08:45pm] <@mulander> chodzi o nawiasy.
[08:45pm] chodzi mi o $hash{1}
[08:45pm] aa ok
[08:45pm] no mi tez ;]
[08:45pm] <@mulander> jeszcze jakies pytania ?
[08:45pm] ja nie mam
[08:45pm] <@mulander> jak nie to przykladzik
deklaracji hashy ( bardzo debilny :P ) jako przypominajka
[08:46pm]
<@mulander> wykldy.vexillium.org/newhash.pl
[08:46pm] <@phoenix__>
http://wyklady.vexillium.org/newhash.pl
[08:46pm]
<@phoenix__> porawiony
[08:47pm]
<@mulander> a tutaj przyklad dostepu do danego elementu
hasha
[08:47pm] kurde ten split
toszke zamieszal ;d
[08:47pm] <@mulander>
http://wyklady.vexillium.org/acchash.pl
[08:48pm]
<@mulander> ( jak zauwazycie pewnie w acchash.pl,
elementy hasha podlegaja interpolacji w double quoted strings ;) )
[08:48pm] CO??!!
[08:48pm]
<@mulander> w ciagach otoczonych podwojnym cudzyslowiem.
[08:48pm] <@mulander> podlegaja elementy hasha
interpolacji
[08:48pm] <@mulander> czyli jak wstawisz
[08:48pm] no to wiem
[08:48pm] okej
[08:48pm] juz kumam thx
[08:48pm]
<@mulander> print "%hash{mulander}\n";
[08:48pm]
<@mulander> to wydrukuje 100pkt
[08:49pm]
<@mulander> i znak nowej lini
[08:49pm]
<@mulander> lecimy dalej ?
[08:49pm]
nie
[08:49pm]
oko mnie boli
[08:49pm]
<@mulander> w sumie teraz jeden z najkrotszych tematow
dotyczacych hasha bedzie :P
[08:49pm]
ej, a co by wyswietlilo
[08:49pm] jesli dalbys 2 adresy stron?
[08:49pm] <@mulander> w jakim sensie dwa
adresy ?
[08:50pm] my %strona = (
[08:50pm] adres =>
'perlmonks.org',
[08:50pm]
tematyka => 'perl',
[08:50pm] );
[08:50pm] mulander:
[08:50pm]
<@mulander> zmodyfikuj kod tak by pokazal co rozumiesz
poprzez dwa adresy
[08:50pm] 20:47
<@mulander> print "%hash{mulander}\n";
[08:50pm] nie powinno byc $ zamiast % ?
[08:50pm] <@mulander> zlyZwierz fakt powinno
;)
[08:50pm] ok
[08:50pm] <@mulander> zamyslilem sie ;)
[08:50pm] <@mulander> i literowke walnalem :>
[08:51pm] my %strona = (
[08:51pm] adres =>
'perlmonks.org',
[08:51pm]
tematyka => 'perl',
[08:51pm] adres => 'wyklady.org',
[08:51pm] tematyka =>
'nauka',
[08:51pm] );
[08:51pm] <@mulander> reqamst ten kod ci sie
nie odpali ;)
[08:51pm] sa 2 pary
[08:51pm] tych samych kluczy
[08:52pm] <@mulander> oczywiscie o ile uzywasz
use strict i use warnings;
[08:52pm]
czyli musialbym stworzyc jeszcze
[08:52pm] my %strona2 = (
[08:52pm] adres => 'wyklady.org',
[08:52pm] tematyka =>
'nauka',
[08:52pm] );
[08:52pm] ?
[08:52pm] <@mulander> Reqamst tak musialbys
[08:52pm] 1 prosba: mozesz
opublikowac zadanka troche pozniej niz o 9 rano? :D
[08:52pm]
<@mulander> ewentualnie
[08:52pm]
<@mulander> moglbys uzyc referencji.
[08:52pm]
<@mulander> ale niechce wam mieszac z referencjami :P
[08:52pm] <@mulander> ( ty poprostu chcesz zrobic
hash zawierajacy hasha tak da sie to zrobic :P )
[08:52pm]
<@mulander> KamiI moge bo bede na wykladach pewnie do 15.
[08:53pm] yo
[08:53pm]
<@mulander> lecimy dalej ?
[08:53pm]
ta
[08:53pm]
lec dalej
[08:54pm]
<@mulander> w sumie to wrzuce bez +m bo za krotki temat
by was uciszac ;)
[08:54pm] <@mulander> wiemy juz jak
automatycznie dodawac elementy do hasha przez autovivikacje
[08:54pm]
<@mulander> prawda ?
[08:54pm]
ta
[08:54pm] <@mulander>
to teraz usunmy jakis element.
[08:54pm] <@mulander>
najpierw robimy hasha
[08:54pm] <@mulander> my %hash;
[08:54pm] <@mulander> $hash{element} = 1;
[08:54pm] <@mulander> teraz usunmy ten element
[08:54pm] <@mulander> nic prosztszego.
[08:55pm]
<@mulander> prostszego :P
[08:55pm]
<@mulander> delete $hash{element};
[08:55pm]
<@mulander> i juz ten element jest trwale z hasha
usuniety.
[08:55pm] <@mulander> UWAGA nie usuwamy w
ten sposob zawartosci calego hasha ;)
[08:55pm]
razem z kluczem?
[08:55pm]
<@mulander> Karql w { } podajesz ZAWSZE klucz ;)
[08:55pm] klucz zostaje tak
[08:55pm] <@mulander> wiec usuwa klucz i
element.
[08:55pm] aha spox
[08:56pm] <@mulander> przechodzimy teraz do
troszke mniej milych rzeczy ale przydatnych ;P
[08:56pm]
<@mulander> duze hashe byly by bezuzyteczne jakbysmy
musieli pamietac wszystkie klucze.
[08:56pm]
<@mulander> wiec programisci perla wymyslili takie
funkcje jak keys, values oraz each.
[08:57pm]
<@mulander> i omowimy je w tej kolejnosci, zaczynajac od
keys.
[08:57pm] <@mulander> keys zwraca liste kluczy
hasha
[08:57pm] <@mulander> czyli jezeli mamy takie
parki w naszym hashu
[08:57pm] <@mulander> a => 1
[08:57pm] <@phoenix__> ide papa
[08:57pm] <@mulander> b => 2
[08:57pm]
<@mulander> c => 3
[08:57pm]
<@mulander> d => 4
[08:57pm]
<@mulander> to @lista_kluczy = keys %hash;
[08:58pm]
<@mulander> zwroci nam liste qw(a b c d);
[08:58pm]
<@mulander> teraz wybiegne troche do przodu i powiem wam
jak wydrukowac wszystkie elementy hasha, o sama funkcje for jeszcze nie pytajcie
;)
[08:58pm] <@mulander> print "$_ => $hash{$_}\n"
for keys %hash;
[08:59pm] <@mulander> wydrukuje nam
to losowo nasze elementy hasha
[08:59pm] <@mulander>
czyli
[08:59pm] <@mulander> np.
[08:59pm]
<@mulander> d => 4
[08:59pm]
<@mulander> c => 3
[08:59pm]
<@mulander> a => 1
[08:59pm]
<@mulander> b => 2
[08:59pm]
<@mulander> jezeli chcemy otrzymac sortowane
alfabetycznie klucze
[08:59pm] <@mulander> uzyjemy do
tego znanej nam juz funkcji sort
[08:59pm]
<@mulander> czyli
[08:59pm]
<@mulander> print "$_ => $hash{$_}\n" for sort keys
%hash;
[08:59pm] <@mulander> i otrzymamy
[08:59pm] <@mulander> a => 1
[08:59pm]
<@mulander> b => 2
[08:59pm]
<@mulander> c => 3
[09:00pm]
<@mulander> d => 4
[09:00pm]
<@mulander> pytania /
[09:00pm]
no
[09:00pm]
to moglbys
[09:00pm]
zrobic jakis przykladzik
[09:00pm] ze stworzeniem hasha
[09:00pm] <@mulander> prosze
[09:00pm] i wykorzystaniem
[09:00pm] keys
[09:00pm] i for
[09:00pm]
<@mulander> http://wyklady.vexillium.org/keys.pl
[09:00pm] thx
[09:00pm]
<@mulander> wszystkim sie laduje ?
[09:01pm] ta
[09:01pm] daj minutke
[09:01pm] zobacze czy wszystko w tym rozumie
[09:01pm] <@mulander> to wydrukuje nam
punktacje najpierw w kolejnosci jaka jest w hashu ( czyli dla nas losowa dla
komputera taka jak chce )
[09:01pm] <@mulander> a
potem wydrukuje posrotowane alfabetycznie wedlug kluczy
[09:02pm] no rozumiem
[09:02pm] thx
[09:02pm]
<@mulander> jeszcze jakies pytania ?
[09:02pm] $_
[09:02pm] to przykladowa zmienna;P
[09:02pm] <@mulander> $_ to specjalna zmienna
perla ;)
[09:02pm] czyli
[09:03pm] <@mulander> niektore petle funkcje
itd korzystaja z niej jezeli nie podamy wlasnej
[09:03pm]
<@mulander> jezeli bym napisal
[09:03pm]
<@mulander> print "$zmienna => $hash{$zmienna}\n" for
my $zmienna sort keys %hash;
[09:03pm] <@mulander>
wtedy kazdy klucz bylby po kolei przypisywany do $zmienna
[09:03pm]
<@mulander> jako ze jej nie podalem
[09:03pm]
<@mulander> jest automagicznie zapisywany do zmiennej $_
[09:03pm] thx
[09:03pm]
<@mulander> ale powiemy sobie dokladnie jak dzialaja te
petle itd przy petlach ;)
[09:04pm] <@mulander>
jeszcze jakies pytanka ?
[09:04pm] no
nie^^
[09:04pm] <@mulander> to lecimy dalej
[09:04pm] <@mulander> podobnie jak keys, funkcja
values zwraca rowniez liste ale tym razem jest to lista wartosci.
[09:05pm]
<@mulander> zalozmy ze chcemy wydrukowac wszystkie punkty
z tego przykladu
[09:05pm] <@mulander> print "$_\n"
for values %hash;
[09:05pm] <@mulander> albo chcemy
je posortowane od najwiekszej ilosci do najmniejszej
[09:05pm]
<@mulander> print "$_\n" for sort { $b <=> $a }
values %hash;
[09:05pm] <@mulander> przyklad
znajdziecie tutaj
[09:06pm] <@mulander>
http://wyklady.vexillium.org/values.pl
[09:06pm]
<@mulander> pytania ?
[09:07pm]
niet
[09:07pm]
<@mulander> to przechodzimy do each
[09:07pm]
<@mulander> each dziala troche odmiennie od keys i values
[09:07pm] <@mulander> otoz przy kazdym wywolaniu
[09:07pm] <@mulander> zwraca on tylko jedna pare
klucz/wartosc
[09:07pm] <@mulander> ale tez pamieta
jakie juz zwrocil
[09:07pm] <@mulander> wiec bedzie
je zwracal az zwroci wszystkie.
[09:08pm] <@mulander>
btw zapomnialem o przykladzie do usuwania elementow :P
[09:08pm]
<@mulander> http://wyklady.vexillium.org/delhash.pl
[09:08pm] <@mulander> czyli jezeli mamy hash (
wracamy do each )
[09:08pm] <@mulander> my %hash =
(a=>1,b=>2);
[09:08pm] <@mulander> i zrobimy
[09:09pm] <@mulander> my ($key,$value) = each %hash;
[09:09pm] <@mulander> to w $key znajdziemy 'a' a
natomiast $value bedzie mialo liczbe 1
[09:09pm]
<@mulander> przy drugim wywolaniu
[09:09pm]
<@mulander> bedzie to $key = b i $value = 1
[09:09pm]
<@mulander> drobny przyklad ( tu tez jest uzyta petla
narazie nie zwracajcie na nia za bardzo uwagi :P pokazuje tylko do czego takie
cuda sie moga przyda )
[09:10pm] <@mulander>
http://wyklady.vexillium.org/each.pl
[09:10pm]
<@mulander> pytania ?
[09:10pm]
23:10 <@mulander> bedzie to $key =
b i $value = 1
[09:10pm] a nie dwa?
[09:10pm] value
[09:10pm] <@mulander> tak przepraszam 2 :)
[09:10pm] <@mulander> O Unavowed ello ;)
[09:10pm] <@mulander> a ty tu czego? :P
[09:10pm] czesc
[09:10pm] a tak przyszedlem zobaczyc co
sie dzieje
[09:10pm]
;>
[09:10pm]
<@mulander> :P
[09:10pm]
<@mulander> dobra jeszcze jakies pytanka?
[09:10pm] mulander: czyli each masz
[09:10pm] a jak zrobic
zeby zatrzymal
[09:11pm]
zeby np cos wsadzic miedzy klucz a wartosc
[09:11pm] wypisywanie gdy
dojdzie do okreslonego klucza?
[09:11pm]
tu sa takie petle jak w innych jezykach?
[09:11pm] ta
[09:11pm] <@mulander> Reqamst to juz kontrola
petli.
[09:11pm] <@mulander> tak mozna przerwac petle
[09:11pm] <@mulander> tylko zamiast break; uzywa sie
last;
[09:11pm] <@mulander> zreszta jest tez pare
innych mozliwosci ale o tym powiem przy petlach
[09:11pm]
mulander: a np chcesz dwarazy wydrukowac wykorzystujac
each
[09:11pm] to mozesz to
each wyzerowac zeby odnowa szedl
[09:11pm]
?
[09:12pm]
<@mulander> Karql mozesz kazac petli sie wykonac 2 razy
;)
[09:12pm] <@mulander> bez zmiany warunku np.
[09:12pm] <@mulander> ale o tym przy petlach.
[09:12pm] no wlasnie
[09:12pm] to wiem
[09:12pm] bo juz sie gubie:P
[09:12pm] ale np na koncu i na poczatku chce
to wydrukowac
[09:12pm] to
jesli petla wykona sie cala a pozniej zrobie druga petle to bedzie tez od nowa
[09:12pm] ?
[09:12pm] <@mulander> Karql to jest petla +
instrukcja warunkowa ktora uruchamia instrukcje zmieniajaca przebieg petli.
[09:12pm] <@mulander> Karql tak bedzie od nowa.
[09:13pm] <@mulander> to nie usuwa nic z hasha.
[09:13pm] <@mulander> tylko wydobywa az dojdzie do
konca
[09:13pm] <@mulander> i znow sie ustawia na
poczatek.
[09:13pm] dobra
sprawdzilem sobie
[09:13pm] <@mulander> lecimy
dalej ?
[09:13pm] a w each mozna
sortowac
[09:13pm] ?
[09:13pm] ta
[09:13pm] <@mulander> each jak sie uprzesz to
posortujesz ale to nie wygodne.
[09:14pm] <@mulander>
lepiej uzyc sort keys %hash
[09:14pm] <@mulander> i
wtedy uzywac $key $hash{$key}
[09:14pm]
mulander: nic nie rozumiem, ale lec dalej
[09:14pm] <@mulander> Ingo hashe sa troche nie
logiczne jak sie z nimi nie pracowalo :>
[09:15pm]
<@mulander> dobra teraz powiemy sobie o innym triku.
[09:15pm] <@mulander> zalozmy ze mamy hash
[09:15pm] <@mulander> my
%hash = (
[09:15pm] <@mulander> a => 1,
[09:15pm] <@mulander> b => 2,
[09:15pm]
<@mulander> c => 3,
[09:15pm]
<@mulander> );
[09:15pm]
<@mulander> jak wiecie a b c to klucz 1 2 3 to wartosci
[09:15pm] <@mulander> ale mozemy sobie odwrocic tego
hasha ;)
[09:15pm] <@mulander> chociaz to rzadko
spotykana metoda i latwo wywolujaca bledy
[09:15pm]
<@mulander> mozemy zrobic
[09:16pm]
<@mulander> my %rev = reverse %hash;
[09:16pm]
<@mulander> teraz dla %rev wyglada tak
[09:16pm]
<@mulander> 1 => 'a',
[09:16pm]
<@mulander> 2 => 'b',
[09:16pm]
<@mulander> 3 => 'c',
[09:16pm]
<@mulander> tutaj musze wspomniec o jednej rzeczy
[09:16pm] <@mulander> zanim takie cos bedziecie
chcieli zrobic
[09:16pm] <@mulander> upewnijcie sie
ze zadna wartosc sie nie powtarza
[09:16pm]
<@mulander> poniewaz klucze musza byc identyczne
[09:17pm] <@mulander> i jezeli ktorys sie powtorzy to
nadpisze poprzedni.
[09:17pm] <@mulander> pytanka ?
[09:17pm] tia
[09:17pm] chyba klucze nie moga byc
identyczne
[09:17pm] :D
[09:17pm] a jak zapisac
cos do klucza
[09:17pm]
bedzie cos o wykozystaniu socketow?
[09:17pm]
<@mulander> Karql dlatego mowie ze by nadpisal poprzedni.
[09:17pm] ale napisales ze musza
byc identyczne:D
[09:17pm] <@mulander> Ingo
jezeli dalej bedzie zainteresowanie kursem to tak.
[09:17pm] i potem jeszcze dopisac do tego
klucza
[09:17pm] czaski blad
[09:17pm] :D
[09:17pm] <@mulander> fakt :
[09:17pm]
<@mulander> :P
[09:18pm]
o czym wyklad?
[09:18pm]
<@mulander> mialo byc nie moga byc identiczne.
[09:18pm] <@mulander> ant_ perl.
[09:18pm] mulander: tak btw ale mnie dzisiaj
tenbot wnerwia:D
[09:18pm]
hashe
[09:18pm]
ciagle trwa?
[09:18pm]
ale to pozniej pogadamy
[09:18pm]
<@mulander> ok
[09:18pm]
<@mulander> ant_ dopiero sie zaczal o 20 :P
[09:18pm] aaa
[09:18pm] to sora :)
[09:18pm] hmmm? mulander? ;>
[09:18pm] przepraszam za
spoznienie panie profesorze :)
[09:18pm]
<@mulander> Reqamst co rozumiesz poprzez dopisac do
klucza ?
[09:19pm] <@mulander> ant_ wybaczam ;P
[09:19pm] a to ty! :)
[09:19pm] <@mulander> a kto?:P
[09:19pm] mozesz powtorzyc od poczatku? :)
[09:19pm] wlasnie
[09:19pm] mozna zmienic
wartosc klucza?
[09:19pm]
dobra, dobra ide pic dalej i nie przeszkadzam :)
[09:19pm] <@mulander> w3b mozesz usunac klucz.
[09:19pm] <@mulander> delete $hash{key}
[09:19pm]
<@mulander> i zapisac sobie nowy
[09:19pm]
<@mulander> ale podmienic nie.
[09:19pm] mam np. a => 3,
[09:20pm] a chce zmienic
na c => 34,
[09:20pm] a jak
sie tworzy nowy klucz
[09:20pm] <@mulander>
w3b mowilem o tym.
[09:20pm] <@mulander>
$hash{nowy_klucz} = "wartosc";
[09:20pm]
a tak racja
[09:20pm]
sory
[09:20pm]
:P
[09:20pm] <@mulander>
Reqamst nie podmienisz kluczy.
[09:20pm] <@mulander>
mozesz usunac klucz a
[09:20pm]
wrzuccie logi na serwer :)
[09:20pm]
<@mulander> i dodac klucz c
[09:21pm]
<@mulander> hmm ma ktos ladnego loga ?
[09:21pm] czesc Astarot|aw
[09:21pm] <@mulander> chwilka przerwy
[09:22pm] <@mulander> ja wrzuce loga dla ant_
[09:22pm] kej
[09:22pm] ave
[09:22pm] ave mulander
[09:22pm] koniec juz?
[09:22pm] wrzucaj a ja pojde po piwo :)
[09:22pm]
nie!