Hlavní navigace

Názory k článku
Perličky (2)

RWS
RWS (neregistrovaný)
6. 12. 2001 8:17 Nový

Re: Cviceni

a) kdyz jsem zadal neco do toho pole a stisknul Enter, tak se mi Netscape presmeroval nekam na neexistujici odkaz na www.root.cz
b) zadal jsem ($hod,$min,$sec)=split(":",$time);, coz jsem si pro jistotu overil a je to take spravne. Nezapominejte na TIMTOWTDI:))

bobo
bobo (neregistrovaný)
6. 12. 2001 10:07 Nový

Bez titulku

celé vlákno

neni to skoda, ze neumi vnorene seznamy ? to je vec ktera se mi napr. v pythonu strasne moc libi :)

ico
ico (neregistrovaný)
6. 12. 2001 11:52 Nový

Re: vnorene <hocico>

celé vlákno

Vnorene hocico:
@a=(1,2,[3,4,5,{"k1"=>6,"k2"=>7}]);
print $a[2][3]{'k2'};# 7
#...3. prvok pola @a je pole a jeho 4. prvok je zase hash.

Stepan
Stepan (neregistrovaný)
6. 12. 2001 11:56 Nový

Re:

celé vlákno

Perl samozrejme vnorene seznamy umi a to uzitim specialnich zavorek [ ], jejichz hodnotou je odkaz na pole. Tedy:
@a = ( [ 'a', 'b' ], 'c') je pole o dvou prvcich, kdy prvni je odkaz na pole o dvou prvcich. Pristupuje se k tomu zcela transparentne. A kdyz se chce vytvorit vnorene pole z existujiho pole, tak se uzije @b = ( \@a, 'd').

schweppes
schweppes (neregistrovaný)
6. 12. 2001 13:55 Nový

Re:

celé vlákno

Moje rec. Python je opravdu jeden z nejsilnejsich<a nejkrasnejsich jazyku, ktere jsem kdy potkal. Je strasne snadny k pochopeni, zadny zavorkovy peklo, proste vim, ze [] je list, () je tuple a {} asociativni pole. A z toho vseho se nechaji poskladat krasne veci. Ke vsemu vse je objektove (od verze 2.2 se necha dedit i od vestavenych typu), slice konstrukce, __doc__ stringy, moznost emulovat ruzne atributy objekt pomoci __getattr__ a __setattr__, vyznaceni jednotlivych bloku jen na zaklade odsazeni, &quot> a nejkrasnejsich jazyku, ktere jsem kdy potkal. Je strasne snadny k pochopeni, zadny zavorkovy peklo, proste vim, ze [] je list, () je tuple a {} asociativni pole. A z toho vseho se nechaji poskladat krasne veci. Ke vsemu vse je objektove (od verze 2.2 se necha dedit i od vestavenych typu), slice konstrukce, __doc__ stringy, moznost emulovat ruzne atributy objekt pomoci __getattr__ a __setattr__, vyznaceni jednotlivych bloku jen na zaklade odsazeni, "multiplatformita", debuger a profiler napsany v pythonu, regulerni vyrazy, unicode... to vse me presvedcilo, ze tenhle jazyk je pro me tim pravym nabozenstvim.


Python ma kompilaci snad odjakziva. S cim trochu zaostava, to je optimalizace. Pokud si o ni clovek rekne volbou -o na prikazovym radku, python (2.0) pouze vynecha nastavovani nekterych debugovacich informaci. Verim, ze v novejsich verzich tomu ale bude jinak.


Dekuji, Honza

Zakkr
Zakkr (neregistrovaný)
6. 12. 2001 11:46 Nový

Perl 6?

celé vlákno

Kdyz jsem tak cetl tu cast o Perlu 6 tak jsem se nemohl ubranit pocitu, ze jsem neco podobneho uz nekde slysel... jak, ze se to jmenovalo... gcc? Aneb ruzne jazyky do vlastniho kodu a pak z toho udelat nejaky vysledek. Nebude se zde objevovat objevene?

uživatel si přál zůstat v anonymitě
6. 12. 2001 22:05 Nový

Re: Perl 6?

celé vlákno

interpretovany jazyk vyzaduje neco jineho nez jazyk kompilovany (maximalni rychlost syntakticke i semanticke analyzy, minimalizaci vnitrnich struktur, volitelnou kompilaci kodu).

in_gen_Ir
in_gen_Ir (neregistrovaný)
6. 12. 2001 21:28 Nový

Perl 6?

Pekny clanek, pokud clovek chce opacko perlu 5. Ale mozna by stalo za to, kdyz uz se opakuje perl 5, rict, co vsechno se (prevdepodobne) v perlu 6 zmeni:
=> nebude nadale jina forma carky
kontextu bude mnohem vic
nebudou existovat typegloby - proc se tedy tady opakuji ?
etc.

Ja nerikam, ze je spatne se rozepsat o perlu 5, ja si jen myslim, ze pro pochopeni perlu 6 neni treba vedet vsechny veci, ktere tam *nebudou*.

in_gen_Ir
in_gen_Ir (neregistrovaný)
6. 12. 2001 21:33 Nový

pravdivostni hodnoty

perl 6 bude mit neco jako bool, bude to prave jeden z novych kontextu.
jina vec jsou properties, ty umoznuji prilepit dalsi (pojmenovanou) hodnotu k objektu, cili:
return 0 is true;
se v numerickem kontextu vyhodnoti jako normalni nula, je-li vsak pouzita v podmince a tim v bool-kontextu, tak jako true. :)

Jenda
Jenda (neregistrovaný)
8. 12. 2001 16:20 Nový

Erata a jine poznamky

1) "speciální znak "=>" je pouze náhražkou za čárku, kterou si tam Perl potom stejně dá."

Ovsem jisty maly ale podstatny rozdil mezi => a carkou tu prece jen je. Zkuste tohle :

%OK = (time => '15:30');
%BAD = (time, '15:30');

foreach (keys %OK) {print "OK: $_ => $OK{$_}\n"}
foreach (keys %BAD) {print "BAD: $_ => $BAD{$_}\n"}

=> totiz na rozdil od carky zaridi to, ze pokud ta vec pred nim vypada jako slovo tak se bude brat jako retezec a ne jako volani funkce.

2) "otázkou zůstává, co bude interpret říkat na to, když se pokusíme hash inicializovat lichým počtem prvků. ... nebude z toho moc nadšen, něco zabrumlá, ale program fungovat bude."

Tohle zavisi na tom jestli mate zapnute warningy. Coz byste samozrejme meli ;-)

3) "V Perlu rozeznáváme dva kontexty: skalární a seznamový. "

A pak jeste prazdny, ciselny a logicky. I kdyz ten ciselny a logicky wantarrayem nezjistite :

sub test {
print "wantaray=".wantarray()."\n";
print "wantarray ".(defined wantarray() ? "" : "not ")."defined\n";
};

print "LIST\n";
@a = test();

print "SCALAR\n";
$a = test;

print "VOID\n";
test();

Ciselny a logicky kontext zpusobuje urcite konverze.

4) Konstanty : "nejpřirozenější je vytvořit si funkci,
která prostě vrátí hodnotu"
sub PI { 3.1415 };

Lepsi je napsat to takhle :

sub PI () { 3.1415927}

ty kulate zavorky znamenaji, ze tato funkce nikdy nebere zadne parametry. A optimalizator zaridi, ze se ve skutecnosti zadna funkce volat nebude (jako inline funkce v C). A nehrozi vam potom, ze misto toho aby k PI nevo pricetl zavola funkci PI a da ji to cislo jako parametr.

Zkuste
print PI + 5;
postupne s obema definicema.

Z tohoto je jasne, ze
use constant PI => 3.1415927;
toho dela o malicko vic, nez ze nadefinuje funkci.

5) Typegloby

Podle me je lepsi existenci typeglobu zatajit. Prinejmensim zacatecnikum.

Pokud chcete predavat ovladace souboru nebo mit jistotu, ze vam ten vas ovladac nejaka jina funkce neprepise pak je spravny postup :

use FileHandle;
sub mySub {
...
my $FH;
open $FH, $filename or die "can't open: $!\n";
mySubSub(1,2,3,$FH);
close $FH;
}

Tohle je mnohem bezpecnejsi nez hrat si s typegloby.

6) "To není překlep, protože funkce return volaná bez parametrů implicitně vrací nepravdu. Mohli byste tedy napsat "return 0;" -- je to to samé v bledě modrém."

To tedy setsakra neni, jedine v logickem kontextu. Zkuste si vytisknout navratovou hodnotu te funkce ;-) Dokonce ani
return undef;
neni to same co
return;

Zkuste si :
sub Undef {return undef}
sub Nic {return}
@Undef = Undef;
@Nic = Nic;
print "Undef's true\n" if @Undef;
print "Nic's true\n" if @Nic;

7) in_gen_Ir: "return 0 is true;
se v numerickem kontextu vyhodnoti jako normalni nula, je-li vsak pouzita v podmince a tim v bool-kontextu, tak jako true"

Coz se v soucasnem Perlu obvykle pise
return "0 but true";
;-)

Hnidopich Jenda ;-)

P.S.: Jen pis dal Lukasi, nenech se otravit! Ja si nikdy nemuzu nechat ujit prilezitost se trosku vykecavat ;-)

VirKing
VirKing (neregistrovaný)
10. 1. 2002 20:39 Nový

Re: Priklad

Este malicka poznamka k tomu prikladu:
($hod,$min,$sec) = split /:/,$time;
nie je to iste ako ... = split / : /,$time
aj ked to JavaScript vyhodnoti ako "Vyborne" :) To len aby to niekoho nemiatlo ;)

Zasílat nově přidané příspěvky e-mailem