Good fuck at Perliini eli Perl tutti # 7 Varoitus!!! Tämä dokumentti on suojattu edellisten dokumenttien disclaimereilla sekä muulla krääsällä. Lisäys edellisiin varoituksiin: En vastaa Perlissä olevista toiminnoista, jotka ovat lukijan tietämättömissä. En voi paljastaa Perliinin sijaintia vaan jokaisen lukijan on löydettävä sinne itse. Voin antaa vain kartan eli nämä tutit. Oikein tulkitsevat pääsevät Perliiniin asti. En ole siis vastuussa eksyneistä tai Perliiniin epätoivoisesti yrittäneille sattumista vahingoista. Lyhest: En ota vastuuta mistään. End_of_Varoitus!!! Tämän tutin ideana on selkeyttää aiempia tutteja ja tehdä selkoa sellaisista ominaisuuksia, jotka jäivät mainitsematta aiemmin. Toimii suurelta osalta FAQ-pohjalta. Eli lukijoiden(/jan) kysymykset ja lisäselvitykset. Mitä tulikaan sanottua ---------------------- Elikkäs kysymykset, joihin löytyy vastaus muista perl-tuteista. Q: Mitä printf() tekee? Eli syntaxi ja esimerkkejä kaivataan. A: Kuten tutissa #1 mainitsin, printf on samanlainen kuin C:ssä. printf@PERL = printf@C. Q: Mulle on myös jäännyt epäselväksi notta onko Perlissä globaaleja ja locaaleja muuttujia erikseen. Siis voiko muuttujasta tehdä vain paikallisen, jotta välttyisi globalisaatiota vastustavien aktivistien väkivaltaisilta protesteilta? A: Perliini tutti #2 on vastaus. Funktiot-kappaleessa. Lokaaleja muuttujia ovat aliohjelmissa määritetyt muttujat. Ja myös: local $muuttuja; -määritykset. Globaaleja muuttujia ovat kaikki muut muualla kuin funktioissa määritetyt. Q: Voiko muuttujaa jotenkin deletoida? A: Vastaus on epäsuorasti tutissa #1: $muuttuja = undef; Helppoa. Ja mitä ei ---------- Q: Kiinnostaisi tietää notta minkälaiset taidot Perlillä on laskea mathemaattisia laskutuksia. Ja jos Perl ei ole matikan kursseilla ollut niin onko joku ahkera ihminen vääntänyt jonkunlaisen helmimoduulin (vrt. CGI.pm), joka olisi erikoistunut matemaattiseen aktiviteettiin. Tarkoitan siis jonkinlaisia random(), sqr() ja round() funktio kokoelmia. A: Katso perl/lib/math/*.pm (sekä dokat: perl/html/lib/math/*.html) fsqrt() ja round() löytyvät ainakin. Q: Voiko Perlissä käsitellä merkkejä hieman syvemmällä tasolla kuten ASCII koodeina tai jollain muulla low level tekniikalla? A: perl/lib/unicode ja perl/lib/bytes.pm (ja niiden dokat: perl/html/lib/bytes.html ja perl/html/lib/pod/perlunicode.html) Lisäykset --------- Muuttuja $0 sisältää perl ohjelman nimen eli ohjelma.pl. Mahdolliset numeromuuttujat: 12345 # nummero 12345.67 # desimaalinummero .23E-10 # erittäin pieni nummero 4_294_967_296 # luettavuuden takia alaviivalla erotettu tuhannet 0xff # heksaa 0377 # oktaalinumero 0b011011 # binäärinumero Merkkejä: print v9786; # tulostaa UTF-8 koodatun HYMIÖN, "\x{263a}" print v102.111.111; # tulostaa "foo" (ASCII koodeina) print 102.111.111; # sama kuin edellä Listoja ja hässimistä: Seuraavat tekevät saman asian: ($varit{'puna'}, $varit{'sini'}, $varit{'viher'}) = (0x00f, 0x0f0, 0xf00); %varit = ('puna',0x00f,'sini',0x0f0,'viher',0xf00); %varit = ( puna => 0x00f, sini => 0x0f0, viher => 0xf00, ); Aliakset: *se = *toi; Tekee siis: $se=$toi, @se=@toi, %se=%toi Esimerkkejä ----------- Lokaalit ja globaalit muuttujat: sub lokaali { my $testa; #lokaali, tuhoutuu, kun sub-loppuu, tuhoaa samannimisen globaalin local $testb; #lokaali, tuhoutuu, kun sub-loppuu, tuhoaa samannimisen globaalin $testa="moro"; $testb="hellou"; print $testa."\n"; print $testb."\n"; print $testc."\n"; $testc="C"; #muuttaa globaalin muuttujan arvoa. arvo säilyy ohjelman loppuun } $testa="A"; #globaali, käytettävissä kaikkialla, mutta lokaali-ohjelmassa samanniminen muuttuja korvaa. $testb="B"; #globaali, käytettävissä kaikkialla, mutta lokaali-ohjelmassa samanniminen muuttuja korvaa. $testc="F"; #globaali, käytettävissä kaikkialla, aliohjelmassa määrätty arvo säilyy. lokaali(); print $testa."\n"; print $testb."\n"; print $testc."\n"; Tämän dokumentin lukijalle annetaan tutti, jota imemällä saa perustiedon perlistä. Perustiedon innoittamana lukijan pitäisi osata hakeutua perl-tietouden pariin. Perliinin kansalaisuutta ei saa kuka tahansa koodinpyörittelijä, vaan Perliinin kansalaisuus on kiven takana. Kivi pitää osata siirtää perlillä syrjään. Siinä sitä imeskelkää tuttia. Mutta tutista pitää joskus luopua Suuren Tiedon edessä. Eihän se lapsikaan tuttia setsemänvuotiaaksi asti ime. Nyt on aika mennä kouluun. Perliinin Elementary School avautunee piakkoin ja kaikki entiset tutin imijät pääsevät perl-koulun penkeille. Tämä tarkoittanee, että perliini-tutteja tulee lisää!!! Jep jep. Imekäämme siis tutteja sivistyneesti! Perl what have you done! (See what you have done!) cp *.>> . (c) 3+666+666+666 Joro, just another lamer in Perliini