Perliini paradise eli Perl tutti # 4 Varoitus!!! Tähän dokumentti on suojattu edellisten dokumenttien disclaimereilla sekä muulla krääsällä. Lisäys edellisiin varoituksiin: Aivan kauhistus! Nyt kun tuli lisättyä noille eestiläisille oma disklaimerinsa, on muunkieliset dokumentinlukijat alkaaneet valittamaan rotusyrjinnästä. Omankielistään disclaimeria haluavat muun muassa: ruotsin-, tanskan-, saksan-, englannin, ranskan-, venäjänkieliset sekä eleläafrikanhinduvähemmistö, chileläiset vapausrintamalaiset, eleläafrikanhinduvähemmistönruotsalaisvähemmistö, japanilaiset, kiinalaiset sekä savolaiset, muutamia mainitakseni. Jossei nuo disclaimerit menny kaaliin niin: En ota mitään vastuuta mistään! Elikkäs mitä hittoa se mulle kuuluu, jos ette ymmärrä tästä disclaimerista hevon paskaakaan! Tästä hyvästä eestinkielisetkin menettävät oman vaaretuksensa. Ettekö te ole oppinut että mulle ei kettuilla! Olen puhunut. Piste. End_of_Varoitus!!! Tulostuksen muotoilu -------------------- Elikkäs jolikkas, muotoilu on siitä hauska juttu ettäs voit määrätä miten se Perl ne ulostuksensa nyt sitten näyttääpi (minne lie). Se on hyödyllinen (ainakin kaverin kaiman tuttavan kaveri sano niin) ominaisuus, jolla voidaan tehrä kaikkea kivastusta. Toimiipi tämä muoto(puoli)ilu näin: kirjoita siihen alusta on yhtä kun jokin jutska ja sitten mitä siihen jutskaan sillai niiku rintataan. Jotenkas esimerkiksi erkki: format OSOITETIETO = ========================= | @<<<<<<<<<<<<<<<<<<<< | $nimi | @<<<<<<<<<<<<<<<<<<<< | $osoite | @<<<<< @<<<<<<<<<<<<< | $postinro, $toimipaikka ========================= . Elikkäs tuo muotoilu alkaa format TULOSTUSKEN_NIMI = ja jatkuupi muotoiluriveillä. Jos rivillä ei ole muotoilujutskia, niin se rintataan ihan normaalisti. Tuo at (@) merkki aloittaa muotoilulelun. Siinä niiden < (pienempi kuin) merkkien määrä kertoo montaks merkkiä tohon voipi enintää rintata ja < merkki meinaa että vasemmalle tasataan ja > meinais että oikeelle ja tommonen pystypalkki (|) meinaapi, että ne jutskat keski(tysleiri)tetään. OSOITETIETO-kohta kertoo tiedoston kahvan, eli tiedosto pitää avata käyttäen kahvaa nimeltä OSOITETIETO. Jos halutaan tulostaa ruudulle, OSOITETIETO pitää korvata STDOUT:lla; Tuon hyväksikäyttö tapahtuupi esim näies: format OSOITE = ========================= | @<<<<<<<<<<<<<<<<<<<< | $nimi | @<<<<<<<<<<<<<<<<<<<< | $osoite | @<<<<< @<<<<<<<<<<<<< | $postinro, $toimipaikka ========================= . open (OSOITE,">ulostus.txt") || die "se kuoli"; open (DATA,"database.txt") || die "nyh tää kuoli"; while () { chomp; ($nimi,$osoite,$postinro,$toimipaikka)=split(/:/); write(OSOITE); } Elikkä se tämä rokrammi lukee databasesta osoitetiedot ja ulostaa ne ulostus.txt fileeseen ne datat tossa muorossa. Siinä datapasettimessa pitääpi ne datat olla näies: Jonkun Nimi:osoite 12:00000:Missäpäin Meillä on myäs (we have too :---) sellaisia numeerisiä juhtuja. Niitä vairten meillä on myäs sellatinen merkki ko risuaita (#). Niillä voiraan muotoilla myäs lukuja, tällättisviisiin: format CKAKSOISPISTE = Koko: @######## Mt Vapaana: @######## Mt Rosentti: @###.## % laske(1),laske(2),laske(3) . sub laske { my ($mikaha,$haha)=@_; if ($mikaha==3) { return $senrossa } else { if ($mikaha==1) { return $senkoko } else { return $senvapaa } } } $senkoko=1000; $senvapaa=200; $senrossa=$senvapaa*100/$senkoko; write(CKAKSOISPISTE); } Elikkäs josset ymmärtäny, omavika. Sih myö voiraan tehrä se sellattiin ett myö, just joo elikkä @*. Ulottupi tuo tulostus useelle riville: format STDOUT = Teksti: @* $very_pitka_tulostus_ulostus End_of_Teksti . $very_pitka_tulostus_ulostus = "Minä\nSinä\nHän\nMe\nTe\nHe\n"; write; Damnet, se saattaa jopa wörkkiii. Sitte myö voidaan myös silleen kätevästi jakaa toi teksti useelle riville. format PALAUTE = Nimi: @<<<<<<<<<<<<<<<<<<< Kommentti: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti . Siis toi tulostaa aina tosta kommentista pätkän ja jatkaapi sitten jos se ei sille yhrelle riville mahru niin toiselle rivelle ja jollei sille niin sitte se jatkaa... joo. On se muuten ikävää, jos sinne tulostuu tyhjiä rivejä vaikkei pitäis. Elikkäs ne saa hastalavistattuu poies näin: format PALAUTE = Nimi: @<<<<<<<<<<<<<<<<<<< Kommentti: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti . Elikkäs noi tildet hastalavistaa ton rivin poies jollei sillä ole mitään elikkäs se on tyhjää täynnä. Muttas eipäs se olekkaan kivaa jos joutuupi tollasii rivejä kirjottelee miljoona, jotta kaikki vaan mahtuis mukaan. Onneski on helpompi tapa: format PALAUTE = Nimi: @<<<<<<<<<<<<<<<<<<< Kommentti: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $kommentti ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< . Nyt toi niiku ulostaa tulostaaa tota $kommenttia kunnes se loppuu. Oli se sitten yhren tai miljoona riviä pitkä (<=taitaapi muuten memmoryt löppyy) Sittenskä on sellattinen peipperille rinttaaminen, jollosta ton tekstin haluis vaikkasta katkeavan eikeskeltä kommenttia: format PALAUTE_TOP = Palaute mun sivulta -- Sivu @< $% . Toi niiku on sellattinen jutska. Toi $% kertoopi montas kertaa tota PALAUTE_TOP:ia on kutsuttu elikkäs joo. Nyt välillä hypelläään toiseen aiheeseen. Täällä on meillä select-kömëntö jöllä säädään tollattii niku oletus öytpyttii muutettua elikkäs voidaan valita STDOUT:in tilalle jotakii muuta kutens jokin file. print "Sreenille\n"; #nyh meillä on alreaty avattu tiedostokahva JESS select (JESS); print "Fileeseen, joka on avattu\n"; print "JESSiin.\n"; select(STDIN); print "Back to the good\n"; jjejejeje. Niinjoo, noita formatteja voidaan soveltaa myös tohon STDIN:iin elikkäs kaikki data mitä tonne rintataan filtteröidään. Niinku noin: $~ = "PALAUTE"; Tollon käytetää tota meijän palautejutskaa tohon rinttaamiseen. Nyh mä kertoo miten tota PALAUTE_TOP-hommaa käytettiin. Elikkäs tällee: $^ = "PALAUTE_TOP"; Elikkäs aina ku sivu tulee täyteen rintataa toi ja sitten vasta ne datat. Easya. Jottas muuten saisit määrätä ton sivun pituuden, elikkä sen että millos se sivu tulee täyteen useta: $= = 24; Elikkäs määrittää sivun pituudeksi 24 riviä. Sitten me voiraan muuttaa tota kyrsörin paikkaa tolla ruudulla, elikkäs mittä rivillä se kursori on/minne riville rintataan. $- --; #vähentääpi yhrellä elikkä edelliselle riville $- 5; #meneepi riville no. viisi (5) Ett noin toin. Hakemistojen käsittely ---------------------- (It's brand new otsikko) Elikkäs tehdään tämä hommeli helposti, eli esimerkki: if (chdir("/usr")) { print "Jepulis"; } else { print "Ei päästy perille asti eli pääteasema puuttuu"; } Jottas halutaan vaikka tollanen *.moi niin hommaa: @a = <*.moi>; #Elikkäs kaikki .moi-päätteiset fileet @a = glob("*.moi"); #sama kuin edellinen Voidaan myöäs usettaa: while (defined($seuraava = )) { print "löyty: $seuraava\n"; } jeps. Me voidaan myös tehdä tälläi. @minasina = Elikkäs kaikki mina- sekä sina-alkuiset fileet listataan. Jos muutes haluat käyttää muuttujaa tosa noin niin ritaappas se alltosulkuihin: @mina=<${mina}> elikkäs just. Alasseisonta (understand)? Tähän väliin pienenä nippelitietona ympäristömuuttujien lukeminen. Esimerkiksi ko sä writaat esim. SET TEST=MOIKKA niin perlissä sä readaat sen: $jepulis = $ENV{"TEST"}; #nyh toi $jepulis on moikka Elikkäs noin. Tiedostojen käsittely --------------------- Perlisssä on sittenkin selluttiset fileiden käsittelyt (siis muutkin ko noi fileiden luomiset/avaamiset) Jossulla on selattinen temp.txt ja se pitäis remooveerata elikkäs poiestaaa niin se tappahtuupi unlink kommentöisellä: print "Hasta la vista, temp.txt...\n"; unlink("temp.txt"); print "I'll be back.\n"; Noies se file joutui bittiterminaattorin uhriksi. Elikkäs nyt sen löytääpi jämäfileiden kaatopaikalta. Jottas elämä olisi helppoa on toikin moni(?)puolinen kömentö: print "Hasta la vista, Perliini\n"; unlink("perliini.txt","perliiniin.txt"); print "Hasta la vista, all of .txt files\n"; unlink <*.txt>; print "I'll be back.\n"; Simppelii???? Nopeasti seuraavat komentoiset: rename($vanha,$uusi); #nimeääpi $vanhan $uudeksi mkdir("hiekkakuoppa",0777) || die "Se on luotu aikoja sitten."; #luopi hiekkakuoppa-nimisen hakemiston rmdir("hiekkakuoppa",0777) || die "Se on hastalavistattu nyh"; #hastalavistaa sen hiekkakuopan Sitten toi inha salainen äkentti 0777 ja kumpp. HUOM! Windowsissa ei ole määreitä (eli oikeuksia) luku mitähä ---- ------ 0777 luku-, kirj.- ja runnimisoikeudet 0666 luku- ja kirj.oikeudet 0444 lukuoikeudet Mktirri töimii nöiets: mkdir(0666,"hiekkakuoppa","soramonttu"); #luopi hiekkasorsia Elikkäs niies, jotenkis näien myös voidaan muutella noita rightejä myöes noille fileille: unless (chmod(0666,"munfile.txt")) { warn "Toi ei oikee wörki ton munfileen oikeuksien muuttaminen."; } Jos nää nyh haluut fileen timettä muuuttaa se häppens shit: $aaika = $baika = 700000000; #some time ago... utime($aaika,$baika,"munfile.txt","tokafile.txt"); #...we had some fileitä Ajaksi tulee 07.03.1992 22.26 (dd.mm.yyyy hh.mm) Mutta tän mää tiijän helposti: $aika = time() + 20*60; # 20 minuuttia myöhemmin ko nyt. utime($aika,$aika,"munfile.txt"); Prosessien hallinta ------------------- (Change to a brand new chapter) Ensinnäkkii system: system("ls"); #arvaappas:) system("ls>lista.txt") && die "Fukki :("; $jokin = "lista."++$i; system "ls>$jokin"; PS. Mikkikäyttiksessä komento on system("dir"); Sittes ko toi olla selvä jutska niin sei kuutpai! TU ei vielä... Jutksaa tulee, ja paljo. Katoppa ja opippa: foreach $avain (sort keys %ENV) { print "$avain=$ENV{$avain}\n"; } Toin tapa usettaa tollasta system jutskaa on: @lista = `ls`; #meinaaapi että ton komennon rinttaus laitetaan #tohon @listaan Sitten niitä voies myös runnia open komennolla, mutta jätän se tässä väliin. Tietojenkäsittely ----------------- Tällänen jutska heti alkuu: $mones = index("hello","e"); #$mones onpi nyh 1 $nimi = "Joro"; $mones = index("Jouni 'Joro' Roivas",$nimi); #$mones on nyh 7 $mones = index("Tämä kusee ja paljon","kusee"); #$mones on 5 $mones = index("Tämä kusee ja paljon","sucks"); #$mones on -1 $mones = index("Terve vaan","e"); #1 $mones = index("Terve vaan","e",0); #1 $mones = index("Terve vaan","e",1); #1 $mones = index("Terve vaan","e",3); #4 $mones = index("Terve vaan","e",7); #-1 Elikkäs toi vika nummero meinaa montako hypellään yli. Sitten korvaillaain jotakin: $s = substr("heippa maailma",3,2); #$s on "pa" $s = substr("heippa maailma",6,100); #$s on "maailma" Tällä voiraan tehrä kymmennen potenssseja: $iso = substr("100000000",0,$potenssi+1); $s = substr("jehna vaan",-4,4); #neljä vikaaa merkkiä Sitten on tälleeekin: $s = "Heippa world"; substr($s,0,6); = "Hello"; #tuleepi "Hello world" Elämä ei suckkaakkaan niin paljon, vai suckkaako? Jotta siihen viimeiseen (muttei vähäiseen) jäisi jotain kirjoitettavaa/ luettaavaa/dataa/turhaa informaatiota/ihan mitä vaan niin lopettelen tämän neljännen virallisen Perl tutin. (piste). Ettäs silleen. Luulenpa että viides tulee olemaan toistaiseksi viimeinen tutti, mutta jos kaikki ei mahdu tohon vikaan niin sittes teen kuudennnen versiooonin. Näin ollen egoni on pönkittynyt taas yhden perltutin verran. Hui kauhistus, tässä tuleepi kiire viettämään ansaittua lomaa. Liiallinen työnteko on uuvuttanut minut aivan lopullisesti ja minussa voi huomata jo lieviä nikkassyndrooman oireita. Aivan kauheaa. Tämäkin vielä. Eikö se mikrosoftaalinen kammiovärinää muistuttava tiltofobia ois riittänyt. Mate in honkon. Tämän dokumentin tekemiseen on käytetty vain hienoinpia raaka-aineita ja ainesosia. Handle with care. ^ Tämä puoli ylöspäin. Perl you around! (C you around) LaillinenTekijänOikeus (c) 2+666+666+666 Joro, just another lamer in Perliini