abonnement Unibet Coolblue
pi_19710441
Het lijkt me sterk dat niemand hier vragen over heeft. Die return van sub ReadFile geeft een list terug, die je expliciet splits door my($error, %Data)=ReadFile "text.txt";. Ik weet niet of iedereen direct in de gaten heeft dat je naast scalars ook lists kunt teruggeven.

Overigens: bij een implicite return (gewoon het einde van de functie zonder return) wordt $_ gereturned = de waarde van de vorige expressie.
  maandag 7 juni 2004 @ 23:13:02 #52
693 ChOas
** Warning: Choking hazard **
pi_19716227
Ooooohkay, ben weer kachel... zal ook niet een vervolg schrijven...

Wat devzero schrijft is grotendeels waar, hij heeft gelijk dat er onderwater bij de return een aantal interessante dingen gebeuren, en die heb ik niet uitgelegd (vooral om het simpel te houden, maar ik heb nog niemand met vragen gehoord... Ja, ik heb het tegen jou, jij, diegene die dit heel interessant vindt maar net niet alles begrijpt en het niet durft te vragen )...

Echter... de impliciete return van een functie is niet $_, maar het resultaat van de laatste uitgevoerde functie/opdracht:

---
#!/usr/bin/perl -w

use strict;

sub Test
{
$_="ladiedadieda";
my $TestWaarde=2 * 333;
};

my $Return=Test;

print "Return: $Return\n";

---

Uitvoer:

choas:~ choas$ ./vooorbeeld
Return: 666
choas:~ choas$


Sorry devzero, moest het even rechtzetten...

Verder heb je absoluut gelijk...

Morgen moet ik even een cursus doen, en dan 's avonds doen we references en misschien een begin van regexps...
"I contend that we are both atheists. I just believe in one fewer god than you do.
When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

[Stephen Roberts]
pi_19718469
quote:
Op maandag 7 juni 2004 23:13 schreef ChOas het volgende:
Echter... de impliciete return van een functie is niet $_, maar het resultaat van de laatste uitgevoerde functie/opdracht:
Agree
quote:
Morgen moet ik even een cursus doen, en dan 's avonds doen we references en misschien een begin van regexps...

Eerst referencies (niet triviaal, maar te doen voor mensen die niet zoveel van pointers weten) en dan regexps
pi_19718508
Mijn hele site is in Perl geschreven. Ben ik nu geslaagd?

Hulde aan ChOas trouwens.
Spread the word, mate

Perl is the best!
Trotse poster van het 37000000ste bericht ^O^
  dinsdag 8 juni 2004 @ 00:57:14 #55
60743 capetonian
Gezocht:lekker wijf!
pi_19719033
tvp (jaaa, .. ik wil geen bookmark, .. maar een tvp)
www.p166.com <- Hobby
pers.p166.com <- Personal
  dinsdag 8 juni 2004 @ 16:33:56 #56
693 ChOas
** Warning: Choking hazard **
pi_19730882
References

Jan takke wat is het heet!!!

*naar koud biertje kijkt* ... Ik overleef het wel

References... wat zijn references ? ... zoals mij ooit verteld is: REFERENCES ZIJN GEEN POINTERS... bullshit, zijn misschien geen pointers, maar je kan ze wel gebruiken als pointers...

Een reference is een scalar welke wijst naar een Perl variabele, zo kan je een reference hebben naar een list, een hash, en ja, ook een scalar (alhoewel je dat laatste niet snel zal gebruiken).

Hoe krijg je een reference naar een list ? heel eenvoudig, je zet er een \ voor.

Ik zal even laten zien hoe dat er uit ziet:

--
#!/usr/bin/perl -w

use strict;

my @Array=(1..10);

# Creeer een reference naar de Array:
my $ArrayRef=\@Array;

#En hoe ziet die reference er dan uit ? :

print "Reference naar de array: $ArrayRef\n";

# En voor een hash:

my %Hash=('appel','groen','banaan','geel');
my $HashRef=\%Hash;

print "Reference naar de hash: $HashRef\n";

---

En wat zien we dan ? (Zier er bij jullie waarschijnlijk iets anders uit) :

choas:~ choas$ ./les10
Reference naar de array: ARRAY(0x80a264)
Reference naar de hash: HASH(0x80cacc)
choas:~ choas$


Nou zijn er meerdere redenen om een reference te gebruiken, in dit deel zal ik uitleggen waarom ze handig zijn wanneer je informatie naar een subroutine wil passen, en in het volgende deel zal ik wat uitleggen over complexe data structuren.

Maar eerst dus subroutines... we hebben gezien dat data naar een subroutine als array wordt aangeleverd... het volgende probleem ontstaat:

---
#!/usr/bin/perl -w

use strict;

sub PrintArray
{
# HIER is het probleem... allebei de arrays zitten in @_, HOE weten we nou
# waar de eerste eindigt, en de 2e begint ?
print "AtUnderscore: @_\n";
};

my @Array1=(1..4);
my @Array2=(5..10);

PrintArray @Array1, @Array2;

---

Output:


choas:~ choas$ ./les10
AtUnderscore: 1 2 3 4 5 6 7 8 9 10
choas:~ choas$


Dat sucked dus... zwaar zelfs... De oplossing voor dit probleem is dus gebruikmaken van references, in plaats van de arrays zelf geven we een reference naar de arrays door aan de functie (dit heeft nog veel meer resource voordelen, maar daar gaan we het niet over hebben).

Gaan we:

---

#!/usr/bin/perl -w

use strict;

sub PrintArray
{
# hebben we de references ?
print "AtUnderscore: @_\n";
};

my @Array1=(1..4);
my @Array2=(5..10);

PrintArray \@Array1, \@Array2;

----

Output:

choas:~ choas$ ./les10
AtUnderscore: ARRAY(0x80ffb4) ARRAY(0x80ca90)
choas:~ choas$


Nou, mooi zo, de references naar de arrays zijn inderdaad in de functie aangekomen, maar hoe de fuck krijgen we daar uit nou weer de originele arrays terug ?

Antwoord: de-refereren

Voor een array als volgt: @{$ArrayRef};
Voor een hash: %{$HashRef};

Kijken of dit werkt ?

---

#!/usr/bin/perl -w

use strict;

sub PrintArray
{
print "AtUnderscore: @_\n";

# Haal de references uit @_
my $Ref1=shift;
my $Ref2=shift;

# de-reference weer naar lists:
my @Arr1=@{$Ref1};
my @Arr2=@{$Ref2};

# Heeft het gewerkt ? :

print "Array 1: @Arr1\n";
print "Array 2: @Arr2\n";
};

my @Array1=(1..4);
my @Array2=(5..10);

PrintArray \@Array1, \@Array2;

---

Output:

choas:~ choas$ ./les10
AtUnderscore: ARRAY(0x80a324) ARRAY(0x80cbb0)
Array 1: 1 2 3 4
Array 2: 5 6 7 8 9 10
choas:~ choas$


En DAT is dus een van de voordelen van references... Hopelijk is dit duidelijk, we gaan dit veel gebruiken.

Bij vragen: Laat het me alsjeblieft weten.

Straks denk ik deel 2 van references: complexe data structuren... wanneer er daarna nog geen vragen zijn is er een van de volgende dingen aan de hand:

  • Iedereen snapt het zonder enig probleem
  • Niemand leest dit
  • Iedereen die dit leest denkt het te snappen
  • Nobody gives a fuck



    Ik hoop dat jullie het nog leuk vinden...

    Weet IEMAND trouwens hoeveel van die klote dingen ik nog moet tikken voor ik in dat fucking schouderklopjestopic kom ?
  • "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      dinsdag 8 juni 2004 @ 19:59:29 #57
    693 ChOas
    ** Warning: Choking hazard **
    pi_19735395
    Nou, het enthousiasme is weer overweldigend , dus we gaan door met complexe datastructuren

    We hebben gezien dat alle variabelen in Perl alleen maar scalars kunnen bevatten, EN we hebben gezien dat de reference naar een hash of array een scalar is... DAAR moeten we wat mee kunnen doen!!!

    We gaan een array maken met personen, een persoon is een hash met verschillende eigenschappen, naam, email adres, en eeerm leeftijd ofzo

    Eeeeeeeeeeerst de lange uitleg:

    ---
    #!/usr/bin/perl -w

    use strict;

    # Een lijst om de personen te bewaren:

    my @Persoon;

    # Hashes voor de personen:

    my %P1=('naam','ChOas','email','xchoasx@wanadoo.nl','leeftijd',27);
    my %P2=('naam','testpersoon','email','test@inter.net','leeftijd',66);
    my %P3=('naam','testpersoon2','email','test2@inter.net','leeftijd',13);

    # Maak de references:

    my $RefP1=\%P1;
    my $RefP2=\%P2;
    my $RefP3=\%P3;

    # Vul de lijst met de references:

    push @Persoon,$RefP1;
    push @Persoon,$RefP2;
    push @Persoon,$RefP3;

    # Kijken wat we in de lijst vinden.

    foreach my $Identiteit (@Persoon)
    {
    # de-refereer de persoon weer naar een hash:

    my %PData=%{$Identiteit};

    # print informatie over de persoon:

    print "Ik ben $PData{'naam'}, ik ben $PData{'leeftijd'} jaar oud, en mijn email adres is: $PData{'email'}\n";
    };

    ---

    Nou, dat is hopelijk nog wel te volgen, toch ? ... zo niet, laat het me weten...

    De output:

    choas:~ choas$ [b ]./les11[/b]
    Ik ben ChOas, ik ben 27 jaar oud, en mijn email adres is: xchoasx@wanadoo.nl
    Ik ben testpersoon, ik ben 66 jaar oud, en mijn email adres is: test@inter.net
    Ik ben testpersoon2, ik ben 13 jaar oud, en mijn email adres is: test2@inter.net
    choas:~ choas$


    En dan nu hoe je het in de praktijk zal doen (later zal je nog veel ingewikkeldere voorbeelden tegenkomen, maar dit is alvast een begin (we gaan hier hele gave dingen meer doen):

    ---
    #!/usr/bin/perl -w

    use strict;

    # Een lijst om de personen te bewaren:

    my @Persoon;

    # Hashes voor de personen:

    my %P1=('naam','ChOas','email','xchoasx@wanadoo.nl','leeftijd',27);
    my %P2=('naam','testpersoon','email','test@inter.net','leeftijd',66);
    my %P3=('naam','testpersoon2','email','test2@inter.net','leeftijd',13);

    # Vul de lijst met de references:

    push @Persoon,\%P1,\%P2,\%P3;

    # Kijken wat we in de lijst vinden.

    foreach (@Persoon)
    {
    # print informatie over de persoon:

    print "Ik ben $_->{'naam'}, ik ben $_->{'leeftijd'} jaar oud, en mijn email adres is: $_->{'email'}\n";
    };

    ---

    En nakijken:

    choas:~ choas$ ./les11
    Ik ben ChOas, ik ben 27 jaar oud, en mijn email adres is: xchoasx@wanadoo.nl
    Ik ben testpersoon, ik ben 66 jaar oud, en mijn email adres is: test@inter.net
    Ik ben testpersoon2, ik ben 13 jaar oud, en mijn email adres is: test2@inter.net
    choas:~ choas$


    Kijk... dat ziet er al een stuk makkelijker uit (tenminste, wanneer je er aan gewend bent )

    Je ziet dus dat je oook doormiddel van '->' een element de-refereren zonder de gehele stuctuur te hoeven aanraken...

    Stel nou dat jullie weer zo fantastisch reageren ga ik vanavond een begin maken aan reguliere expressies... prepare to be brainfucked
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      dinsdag 8 juni 2004 @ 20:14:03 #58
    74523 BaggerUser
    ModderFokker!
    pi_19735758
    hey ookal word er niet de hele tijd gereageerd je moet gewoon door gaan ermee
    dit is alles op een goede manier uitgelegd dus heel handig voor de noobs ik ga er ook mee beginnen binnenkort (alleen dankzij dit topic )
    De enige echte BaggerUser!
    Riemen
    fiets kopen
      dinsdag 8 juni 2004 @ 20:41:11 #59
    693 ChOas
    ** Warning: Choking hazard **
    pi_19736467
    quote:
    Op dinsdag 8 juni 2004 20:14 schreef BaggerUser het volgende:
    hey ookal word er niet de hele tijd gereageerd je moet gewoon door gaan ermee
    dit is alles op een goede manier uitgelegd dus heel handig voor de noobs ik ga er ook mee beginnen binnenkort (alleen dankzij dit topic )
    Ja, sorry dat ik af en toe zeik ... maar af en toe geef ik cursussen, en dan heb je gelijk commentaar, en vragen enzo... nu vraag ik me af en toe af of ik iets fout doe

    Straks komt het begin over reguliere expressies... en eeerm ja, ik kan er goed mee om gaan, maar ik ga jullie ook verwijzen naar sites... reguliere expressies zijn ZO krachtig, en je kan er zo veel mee dat het onmogelijk is voor mij om alles uit te leggen...

    Maar hopelijk kan ik een aardige fundering leveren...
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19736492
    eens kijken of iedereen nog bij de les is:

    #!/usr/bin/perl -w
    use strict;

    sub groet {
    my($ptr) = @_;
    ${$ptr}="Hallo ".${$ptr};
    }

    my($name) = "Paul";
    groet \$name;
    print "$name\n";


    call by reference kan dus zo worden geimplementeerd.
    pi_19736565
    Ik ga trouwens zeker wel even mee lezen als er uitgelegd gaat worden, hoe je op een goeie manier je eigen modules kan maken. Gaat dat ook nog komen, ChOas?
    Trotse poster van het 37000000ste bericht ^O^
      dinsdag 8 juni 2004 @ 20:50:47 #62
    693 ChOas
    ** Warning: Choking hazard **
    pi_19736718
    quote:
    Op dinsdag 8 juni 2004 20:41 schreef devzero het volgende:
    eens kijken of iedereen nog bij de les is:

    #!/usr/bin/perl -w
    use strict;

    sub groet {
    my($ptr) = @_;
    ${$ptr}="Hallo ".${$ptr};
    }

    my($name) = "Paul";
    groet \$name;
    print "$name\n";


    call by reference kan dus zo worden geimplementeerd.
    Precies! ... en nu (Ja, ik ben een lul ) waarom werkt het niet wanneer je geen ( en ) om my($ptr) heen hebt in je sub ?

    Kan trouwens ook nog zo:

    sub groet {
    ${$_[0]}="Hallo ${$_[0]}";
    }


    Maar dat is Perl... de slogan is: TIMTOWTDI (There Is More Than One Way To Do It) en er is niet echt goed of fout (ja, okay, je hebt efficient en niet efficient) maar meestal is de tradeoff 'leesbaar' of 'niet leesbaar'
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      dinsdag 8 juni 2004 @ 20:51:23 #63
    693 ChOas
    ** Warning: Choking hazard **
    pi_19736742
    quote:
    Op dinsdag 8 juni 2004 20:45 schreef daReaper het volgende:
    Ik ga trouwens zeker wel even mee lezen als er uitgelegd gaat worden, hoe je op een goeie manier je eigen modules kan maken. Gaat dat ook nog komen, ChOas?
    Packages ? ... ja... gaan we ook doen... komt bij het OO gedeelte...
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19736807
    /me=* bookmarked

    het is maar goed dat sommige mensen geen leven hebben, kunnen ze ons mooi wat leren

    Maar goeie uitleg, ik zal van het weekend alles eens uitproberen.
    zoals het potje thuis poept, poept het nergens
    _-*-_-*_-*-_-*_-*-_-*_-*-_-*_-*-_-*_-*-_-*_-*-_-*
    ACWW NWFC id: 2921-2609-9160 nick: tbone Town: Finetown
    Fiets
    pi_19736813
    quote:
    Op dinsdag 8 juni 2004 16:33 schreef ChOas het volgende:

  • Iedereen die dit leest denkt het te snappen



    Ik hoop dat jullie het nog leuk vinden...
  • Ik ga voor deze optie En 't is zeker wel leuk
    pi_19737322
    quote:
    Op dinsdag 8 juni 2004 20:51 schreef ChOas het volgende:

    [..]

    Packages ? ... ja... gaan we ook doen... komt bij het OO gedeelte...
    Packages inderdaad
    goed, dan ga ik zeker mee lezen, want die perldocs daarover snap ik echt voor geen meter

    Goeie zaak jongen
    Trotse poster van het 37000000ste bericht ^O^
    pi_19737627
    quote:
    Op dinsdag 8 juni 2004 20:50 schreef ChOas het volgende:
    Precies! ... en nu (Ja, ik ben een lul ) waarom werkt het niet wanneer je geen ( en ) om my($ptr) heen hebt in je sub ?
    Hmm, niemand

    iemand een idee als ik
    my $ptr = $_[0];
    schrijf
    pi_19737773
    quote:
    Op dinsdag 8 juni 2004 21:22 schreef devzero het volgende:

    [..]

    Hmm, niemand

    iemand een idee als ik
    my $ptr = $_[0];
    schrijf
    Ik weet t wel, maar da's flauw, aangezien ik al 5 jaar Perl
    Dus ik geef de beginners een kans om te antwoorden
    Trotse poster van het 37000000ste bericht ^O^
      dinsdag 8 juni 2004 @ 21:41:08 #69
    693 ChOas
    ** Warning: Choking hazard **
    pi_19738143
    reguliere expressies

    Hebben jullie nog een topic of wat ? ... want hier kunnen we wel een tijdje mee bezig zijn

    Mijn plan is om hier 2 posts aan te besteden, en afhankelijk van de vragen extra dingen uit te leggen....

    Morgen overdag werk ik weer, en nu begin ik deel een, dus morgenavond kan je pas deel 2 verwachten.

    *schraapt keel, en klinkt als professor*

    "Hedendaagse programeertalen hebben allemaal wel de mogelijkheid gebruik te maken van reguliere expressies, of ze hebben libraries welke deze ondersteunen. Echter de reguliere expressies van Perl behoren tot de meest krachtige welke je tot je beschikking kan hebben"

    Zo... dat was dat

    "ChOas ? wat de FUCK is een reguliere expressie ?"

    Goeie vraag, en (zoals sommige Perl mensen hier al vaker hebben gemerkt) ik ga deze vraag beantwoorden met een leugen: Een reguliere expressie is een 'pattern match' waarbij je kan kijken of je data aan bepaalde voorwaarden voldoet.

    ZO, en dat is het, en niets meer (<- fucking leugen, maar zo gaan we er mee beginnen)

    Een reguliere expressie bevindt zich tussen twee '/' tekens, (of, wanneer je 'm' voor match gebruikt elke non bracketing tekens, maar dat gaan we niet doen)

    We beginnen even bij het begin... een paar dingen die je moet weten:

  • . elk teken, wat dan ook
  • + 1 of meerdere
  • * 0 of meerdere
  • ? Misschien
  • \s whitespace (spatie, tab, watdanook)
  • \d een getal tussen de 0 en 10
  • \D alles BEHALVE een getal tussen 0 en 10.
  • \w Woord teken dus A tm Z, 0 tm 9
  • \W alles BEHALVE een woord teken
  • {x} Hoeveelheid x
  • {x,y} x tot hoeveelheid y
  • Nog veeeeeeeel meer dingen waar we op terug gaan komen

    We gaan 'simpel' beginnen door een Nederlandse postcode te proberen te ontleden.

    De operator die je gebruikt om een reguliere expressie op iets los te laten is =~

    Het simpelste voorbeeld:

    ---
    #!/usr/bin/perl -w

    use strict;

    my $Postcode="2564 SG";

    print "Postcode: $Postcode\n";
    # Heeft Postcode een teken in zich ?

    print "Er staat een teken in $Postcode\n" if ($Postcode=~/./);
    print "Er staat een getal in $Postcode\n" if ($Postcode=~/\d/);
    print "Er staat een letter in $Postcode\n" if ($Postcode=~/\w/);


    Output (zoals hopelijk verwacht) :


    choas:~ choas$ ./les13
    Postcode: 2564 SG
    Er staat een teken in 2564 SG
    Er staat een getal in 2564 SG
    Er staat een letter in 2564 SG
    choas:~ choas$


    Maarja, dat zegt nog weinig, A53DFGD555 voldoet ook aan al die voorwaarden.

    Dus... wat we eigenlijk zoeken is... 4 getallen, dan een spatie of niet (we weten niet hoe de gebruiker zijn/haar postcode invoert) en dan 2 letters.

    Hoe bouwen we dit op ? :

    4 getallen: \d{4}
    Misschien een spatie ? : \s*
    2 Letters: \w{2}

    in een reguliere expressie ziet dit er zo uit: /\d{4}\s*\w{2}/;

    Dit zorgt er voor dat 1234AZ en 5678 XY Allebei als postcode gezien worden.

    Probleem is dat 432145 ook als postcode gezien wordt (4 en 5 zijn tenslotte toch 'word tekens'... maar daar komen we later op, dan gaan we character classes bespreken.

    Maar hier is de code:

    ---
    #!/usr/bin/perl -w

    use strict;

    my $Postcode="2564 SG";

    print "Postcode: $Postcode\n";
    # Heeft Postcode een teken in zich ?

    print "Dit is een postcode!!!\n" if ($Postcode=~/\d{4}\s*\w{2}/);

    ---

    Experimenteer maar met waarden voor $Postcode om te zien of het aan je verwachtingen voldoet.

    Nou... ik ben niet eens op een 10e gekomen van wat eigenlijk mijn plan waqs... regexps zijn tricky, en hier moeten we een hoop aandacht aan besteden... ik hoop dat dit een goede start was.



    [ Bericht 0% gewijzigd door ChOas op 08-06-2004 21:46:25 ]
  • "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      dinsdag 8 juni 2004 @ 21:43:58 #70
    693 ChOas
    ** Warning: Choking hazard **
    pi_19738212
    quote:
    Op dinsdag 8 juni 2004 21:27 schreef daReaper het volgende:

    [..]

    Ik weet t wel, maar da's flauw, aangezien ik al 5 jaar Perl
    Dus ik geef de beginners een kans om te antwoorden
    *mompelt iets over list in scalar context*

    Pfff... dat soort dingen wil ik eigenlijk ook wel graag behandelen... maar het is moeilijk wanneer je geen directe feedback kan krijgen....

    Ik moet trouwens nog een hoop over scalar en list context uitleggen... hmmmm... na regexps gaan we misschien maar weer even een paar stappen terug...
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19740233
    quote:
    Op dinsdag 8 juni 2004 21:41 schreef ChOas het volgende:
    ZO, en dat is het, en niets meer (<- fucking leugen, maar zo gaan we er mee beginnen)
    Mensen die het echt willen weten moeten maar een boek over finite automaten aanschaffen
    plug: Derick Wood-Theory of Computation is een goede starter

    Ik ben benieuwd naar de volgende les. Pattern matching is de kracht van perl. Wat nu: metacharacters of string replacements.

    Nog wat syntactic sugar voor het volgende pilsje en Dr. Phil

    $_ = "Hallo ChOas";
    print "Wie??\n" if(/ChOas/);

    Aangezien gematcht wordt met $_ mag je de =~ operator direct weglaten.
      dinsdag 8 juni 2004 @ 22:53:28 #72
    693 ChOas
    ** Warning: Choking hazard **
    pi_19740321
    quote:
    Op dinsdag 8 juni 2004 22:50 schreef devzero het volgende:

    [..]

    Mensen die het echt willen weten moeten maar een boek over finite automaten aanschaffen
    plug: Derick Wood-Theory of Computation is een goede starter

    Ik ben benieuwd naar de volgende les. Pattern matching is de kracht van perl. Wat nu: metacharacters of string replacements.

    Nog wat syntactic sugar voor het volgende pilsje en Dr. Phil

    $_ = "Hallo ChOas";
    print "Wie??\n" if(/ChOas/);

    Aangezien gematcht wordt met $_ mag je de =~ operator direct weglaten.
    en weer heb je gelijk

    Ik ga even planten water geven bij de buren en dan mijn greppel in...

    Morgen meer regexps, lookaheads, captures, replacements, hoe wel en hoe NIET regexps te gebruiken, etc...

    Gaan wel een aantal posts worden
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      woensdag 9 juni 2004 @ 17:30:19 #73
    693 ChOas
    ** Warning: Choking hazard **
    pi_19759462
    Vervolg op reguliere expressies

    Vorige keer hebben we gezien dat /\d{4}\s*\w{2}/

    Goed matched op de postcode, probleem is alleen dat 0 tm 9 ook onder word characters vallen dus 1234 56 ook als valide postcode werd gezien.

    De oplossing hiervoor: character classes

    Een character class plaats je tussen '[' en ']'

    Voorbeeldjes:

    [abcd] betekent het teken 'a' of 'b' of 'c' of 'd'
    [54fer] betekent of 5 of 4 of 'e' of 'f' of 'r'

    Maar ook:

    [a-z] tekens a t/m z
    [0-9] tekens 0 t/m 9

    Kijken of dit helpt ?

    ---
    #!/usr/bin/perl -w

    use strict;

    my $Postcode="2564 56";

    print "Postcode: $Postcode\n";

    # Fout:
    print "Dit is een postcode!!!\n" if ($Postcode=~/\d{4}\s*\w{2}/);

    #Goed:
    print "Oh nee, toch niet!!!\n\n" unless ($Postcode=~/\d{4}\s*[a-z]{2}/);


    $Postcode="2564 AB";

    print "Postcode: $Postcode\n";

    print "Test 1: Dit is een postcode!!!\n\n" if ($Postcode=~/\d{4}\s*[a-z]{2}/);

    # Hmmmmm waarom wordt dat nou niet als postcode gezien ?... Ooooooh!!! Caps gevoeligheid!
    # De character class kijkt naar a-z en AB staat in hoofdletters, dus dat matched niet...
    # Nu kunnen we de charclass uitbereiden met A-Z zodat hoofdletters ook herkend worden, maar
    # we kunnen de regexp ook ongevoelig maken voor hoofd/kleine letters door er een 'i' achter
    # te zetten (Ignore case):

    print "Test 2: Dit is een postcode!!!\n\n" if ($Postcode=~/\d{4}\s*[a-z]{2}/i);

    ---

    Output:

    choas:~ choas$ ./les14
    Postcode: 2564 56
    Dit is een postcode!!!
    Oh nee, toch niet!!!

    Postcode: 2564 AB
    Test 2: Dit is een postcode!!!

    choas:~ choas$


    Yup, werkt... straks meer delen...
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      woensdag 9 juni 2004 @ 18:45:41 #74
    693 ChOas
    ** Warning: Choking hazard **
    pi_19761124
    Heeft iemand misschien een paar regels Apache logging ?
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19762175
    quote:
    Op woensdag 9 juni 2004 18:45 schreef ChOas het volgende:
    Heeft iemand misschien een paar regels Apache logging ?
    Hoeveel wil je er hebben? Mail maar op bofh apendingetje meanframe punt com

    Maareh, vallen er nog wat praktijkvoorbeelden te geven voor pointers, pardon references? Ik denk het te snappen, maar ik zie het wezelijke nut nog niet echt

    Oftewel: Meester, ik snap het wel, maar ik weet niet waarom
      woensdag 9 juni 2004 @ 19:30:25 #76
    693 ChOas
    ** Warning: Choking hazard **
    pi_19762264
    quote:
    Op woensdag 9 juni 2004 19:26 schreef TimberWolf het volgende:

    [..]

    Hoeveel wil je er hebben? Mail maar op bofh apendingetje meanframe punt com

    Maareh, vallen er nog wat praktijkvoorbeelden te geven voor pointers, pardon references? Ik denk het te snappen, maar ik zie het wezelijke nut nog niet echt

    Oftewel: Meester, ik snap het wel, maar ik weet niet waarom
    Dan ga ik eerst nog wat meer uitleggen over references ... Waar zat het probleem ? variabelen passen naar een functie, of meer het complexe datastructuren gedeelte ? ... of allebei ?

    Oh.. mailtje komt er aan
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19762305
    quote:
    Op woensdag 9 juni 2004 19:26 schreef TimberWolf het volgende:

    [..]

    Hoeveel wil je er hebben? Mail maar op bofh apendingetje meanframe punt com

    Maareh, vallen er nog wat praktijkvoorbeelden te geven voor pointers, pardon references? Ik denk het te snappen, maar ik zie het wezelijke nut nog niet echt

    Oftewel: Meester, ik snap het wel, maar ik weet niet waarom
    quote:
    sub alter {
    my ($arg) = @_;
    ${$arg} = 2
    };

    my $test = 1;
    my $ref = \$test;
    print $test;
    alter($ref);
    print $test;
    Alsjeblieft. Ik heb hier een variabele aangepast met behulp van een functie, zonder van die functie een return te gebruiken. Output van deze code is "12"
    Trotse poster van het 37000000ste bericht ^O^
      woensdag 9 juni 2004 @ 19:38:40 #78
    65490 whoops
    Home is where the heart is...
    pi_19762497
    Hey dit is echt cool!!! Na een jaar of twee/drie ervaring met PHP moet het niet zo lastig zijn om Perl te leren a.d.h. van deze handleiding

    ik heb er nu alleen effe geen tijd voor, tvp dus
    In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
    pi_19762686
    quote:
    Op woensdag 9 juni 2004 19:31 schreef daReaper het volgende:
    Alsjeblieft. Ik heb hier een variabele aangepast met behulp van een functie, zonder van die functie een return te gebruiken. Output van deze code is "12"
    Ah. Eh. Nu ga ik inderdaad de domme cursist moeten zijn, want:

    A - Why? Waarom is dat handig?
    B - Ik had nooit gedacht dat ik van zo weinig regels code, zo weinig zou snappen

    Kan iemand me een real-world voorbeeld doen van het nut van pointers? I've gone stupid, blijkbaar
    pi_19762805
    Even pogen deze stap voor stap te doen. Ik move de functie even na de code:


    my $test = 1;

    De variabele test wordt aangemaakt, en gevuld met 1. Clear

    my $ref = \$test;

    Er wordt een reference gemaakt voor test, die noemen we ref. Die wijst dus
    naar de variabele met de waarde 1. Clear


    print $test;

    Duh.

    alter($ref);

    Voer de functie uit

    print $test;

    Laat test zien

    sub alter {
    my ($arg) = @_;

    Vul $arg met de te verwachten waarde. Hier ben ik um kwijt

    ${$arg} = 2

    Not a fucking clue. Sorry...
    };


    Wat mis ik hier nu aan? Ik schaam me dood dat ik het niet snap namelijk

    [ Bericht 1% gewijzigd door TimberWolf op 09-06-2004 19:54:09 (Bollocks, de code tag werkt niet.) ]
      woensdag 9 juni 2004 @ 20:08:36 #81
    693 ChOas
    ** Warning: Choking hazard **
    pi_19763230
    quote:
    Op woensdag 9 juni 2004 19:48 schreef TimberWolf het volgende:

    [..]

    Ah. Eh. Nu ga ik inderdaad de domme cursist moeten zijn, want:

    A - Why? Waarom is dat handig?
    B - Ik had nooit gedacht dat ik van zo weinig regels code, zo weinig zou snappen

    Kan iemand me een real-world voorbeeld doen van het nut van pointers? I've gone stupid, blijkbaar
    Komt ie...
    SPOILER
    Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
    Pfff... dat was even snel coden

    Misschien ging ik daar over een paar dingen een beetje te snel... dus besteed er nog maar geen aandacht aan... ik heb hieronder even het gedeelte wat niet helemaal duidelijk was geprobeert uit te leggen, helpt dat ?

    [ Bericht 1% gewijzigd door ChOas op 09-06-2004 20:20:18 ]
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19763310
    Dit topic ga ik zeker in de gaten houden


    Leuk, die mensen zonder leven
    Wie zoekt zal niet vinden.
      woensdag 9 juni 2004 @ 20:12:37 #83
    693 ChOas
    ** Warning: Choking hazard **
    pi_19763333
    quote:
    Op woensdag 9 juni 2004 19:53 schreef TimberWolf het volgende:
    Even pogen deze stap voor stap te doen. Ik move de functie even na de code:


    my $test = 1;

    De variabele test wordt aangemaakt, en gevuld met 1. Clear

    my $ref = \$test;

    Er wordt een reference gemaakt voor test, die noemen we ref. Die wijst dus
    naar de variabele met de waarde 1. Clear


    print $test;

    Duh.

    alter($ref);

    Voer de functie uit

    print $test;

    Laat test zien

    sub alter {
    my ($arg) = @_;

    Vul $arg met de te verwachten waarde. Hier ben ik um kwijt

    ${$arg} = 2

    Not a fucking clue. Sorry...
    };


    Wat mis ik hier nu aan? Ik schaam me dood dat ik het niet snap namelijk
    aaaaaah... wat hier staat:

    my ($arg)=@_;

    is hetzelfde als : my $arg=shift;

    Dus: Het eerste element in @_ (De reference die aan de functie is meegegeven)...

    ${$arg}=2 betekent dat je 2 stopt in de scalar variabele waar $arg naar wijst.

    Al beter ? zo niet zeg het, leg ik het op een andere manier uit...
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19763563
    quote:
    Op woensdag 9 juni 2004 20:12 schreef ChOas het volgende:

    [..]

    aaaaaah... wat hier staat:

    my ($arg)=@_;

    is hetzelfde als : my $arg=shift;

    Dus: Het eerste element in @_ (De reference die aan de functie is meegegeven)...

    ${$arg}=2 betekent dat je 2 stopt in de scalar variabele waar $arg naar wijst.

    Al beter ? zo niet zeg het, leg ik het op een andere manier uit...
    Ah, dat snap ik inderdaad dan beter Die hele 'do what i mean' variable in perl is krachtig zat, maar leuk verwarrend bovendien.

    In jouw voorbeeld zie ik momenteel zelfs de hele pointers over het hoofd, maar dat kan door de warmte komen Ik pak dadelijk een biertje en een half uurtje rust, en dan komt het vast goed Ga voor de rest overigens vooral verder, ik blaat er af en toe wel tussendoor! Zou zonde zijn als ik de cursus stagneer tenslotte
      woensdag 9 juni 2004 @ 20:25:47 #85
    693 ChOas
    ** Warning: Choking hazard **
    pi_19763719
    quote:
    Op woensdag 9 juni 2004 20:20 schreef TimberWolf het volgende:

    [..]

    Ah, dat snap ik inderdaad dan beter Die hele 'do what i mean' variable in perl is krachtig zat, maar leuk verwarrend bovendien.

    In jouw voorbeeld zie ik momenteel zelfs de hele pointers over het hoofd, maar dat kan door de warmte komen Ik pak dadelijk een biertje en een half uurtje rust, en dan komt het vast goed Ga voor de rest overigens vooral verder, ik blaat er af en toe wel tussendoor! Zou zonde zijn als ik de cursus stagneer tenslotte
    Pjee!!... je stagneert helemaal niets!!.. dan heeft de rest maar wat meer geduld!

    Dat voorbeeld heb ik inderdaad maar even gespoilered, ging een beetje te snel, er zitten daar een hoop impliciete references in...

    Maar, DE reden voor references is (buiten parameters naar functies passen) dat je in een Perl variabele alleen maar een scalar kan stoppen, en daar kan je niet veel mee want je zal ZO VAAK tegenkomen "Had ik maar een lijst met hashes" enzo... dat kan je alleen met references oplossen.

    mocht je ergens mee zitten ben ik ook op MSN te bereiken hoor (xchoasx@hotmail.com)
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19764064
    quote:
    Op woensdag 9 juni 2004 20:20 schreef TimberWolf het volgende:

    [..]

    Ah, dat snap ik inderdaad dan beter Die hele 'do what i mean' variable in perl is krachtig zat, maar leuk verwarrend bovendien.

    In jouw voorbeeld zie ik momenteel zelfs de hele pointers over het hoofd, maar dat kan door de warmte komen Ik pak dadelijk een biertje en een half uurtje rust, en dan komt het vast goed Ga voor de rest overigens vooral verder, ik blaat er af en toe wel tussendoor! Zou zonde zijn als ik de cursus stagneer tenslotte
    't is maar goed dat dit ChOas' topic is, en niet die van mij, of niet dan? Ik ben echt bijzonder slecht in uitleggen
    Trotse poster van het 37000000ste bericht ^O^
      woensdag 9 juni 2004 @ 20:55:52 #87
    65516 gieling
    Live from NYC
    pi_19764622
    offtopic:
    SPOILER
    Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
      woensdag 9 juni 2004 @ 21:51:10 #88
    693 ChOas
    ** Warning: Choking hazard **
    pi_19766352
    Voor de mensen die Tk hebben geinstalleerd (zit standaard bij Activestate Perl), en willen experimenteren met regexps, dit heb ik ooit geschreven... :

    #!/usr/bin/perl -w
    use strict;
    use Tk;

    sub KeyPress;

    my $MW=MainWindow->new;

    my $AsList;
    my %Border=qw(-relief raised);
    my %Fill=qw(-fill both);

    my $Top =$MW->Frame->pack(-side=>'top');
    my $TopLeft =$Top->Frame(%Border)->pack(-side=>'left');
    my $TopRight =$Top->Frame(%Border)->pack(-side=>'left');

    my $RegLabel=$TopLeft->Label(%Border,-text=>'RegExp')->pack(%Fill);
    my $TextLabel=$TopLeft->Label(%Border,-text=>'Text')->pack(%Fill);
    my $AsListBox=$Top->Checkbutton(-text=>'List context',-variable=>\$AsList,-command=>\&KeyPress)->pack();
    $Border{-bd}=1;
    my $RegExp=$TopRight->Entry(-width=>30)->pack();
    my $Text=$TopRight->Entry(-width=>30)->pack();

    my $ResultTextFrame =$MW->Frame(%Border)->pack(-side=>'left');
    my $ResultTextLabel=$ResultTextFrame->Label(-justify=>'left',-text=>"PreMatch:\nMatch:\nPostMatch:\nResult:\n\$1..n")->pack(%Fill);

    my $ResultFrame =$MW->Frame(%Border)->pack(-side=>'left',%Fill);
    my $ResultLabel=$ResultFrame->Label(-justify=>'left',-text=>"none\nnone\nnone\nnone")->pack(%Fill);


    $MW->bind('all', '<KeyPress>', \&KeyPress);
    MainLoop();

    sub KeyPress
    {
    local $^W=0;
    my $RegEx=$RegExp->get;
    my $Text =$Text->get;
    my (@Dollar,@Result,$Result,$Match,$PreMatch,$PostMatch);
    my $Function;
    my $FieldCodes=join "",'$Match=$&;',
    '$PreMatch=$`;',
    "\$PostMatch=\$';",
    "\$Dollar[0]=\$1;",
    "\$Dollar[1]=\$2;",
    "\$Dollar[2]=\$3;",
    "\$Dollar[3]=\$4;",
    "\$Dollar[4]=\$5;";
    if (!$AsList)
    {
    $Function=join "",'($Result=$Text)=~',"$RegEx;",$FieldCodes;
    }
    else
    {
    $Function=join "",'@Result=($Text=~',"$RegEx);",$FieldCodes;
    };
    eval $Function;
    $Result||=join "|",@Result;
    $Match||='none'; $PreMatch||='none'; $PostMatch||='none';
    $ResultLabel->configure(-text=>"$PreMatch\n$Match\n$PostMatch\n$Result\n@Dollar");
    $ResultLabel->update;
    };


    Experimenteer er maar mee...

    Nee, dit was geen les
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19767780
    quote:
    Op woensdag 9 juni 2004 20:36 schreef daReaper het volgende:

    [..]

    't is maar goed dat dit ChOas' topic is, en niet die van mij, of niet dan? Ik ben echt bijzonder slecht in uitleggen
    Het kan ook gewoon zijn dat ik een klein snappertje heb voor dit soort dingen Ben ooit begonnen met C, maar daar haakte ik ook af bij pointers. Op een of andere manier snap ik het doel gewoon niet. Maargoed, het begin helderder te worden. En als Choas met zijn cursus verder gaat, wat ik wel hoop, ga ik vast nog meer praktijkvoorbeelden tegenkomen.
    pi_19767876
    Ah, en chOas, de regexp uitleg is tot nu toe glashelder Ik verheug me op het volgende deel, en de rest vast ook, hoewel er maar weinig reageren
    pi_19768067
    Ik verheug me er ook op hoor
    leuke tutorials, over een tijdje ook dat 'ie bijvoorbeeld HTML pagina's uitgeeft en/of met een database kan praten hoop ik?
      woensdag 9 juni 2004 @ 22:42:32 #92
    693 ChOas
    ** Warning: Choking hazard **
    pi_19768277
    quote:
    Op woensdag 9 juni 2004 22:31 schreef TimberWolf het volgende:
    Ah, en chOas, de regexp uitleg is tot nu toe glashelder Ik verheug me op het volgende deel, en de rest vast ook, hoewel er maar weinig reageren
    Volgende deel regexps ga ik je apache logging gebruiken

    Maar dat wordt morgen... 2 termen die je dan gaat tegenkomen zijn 'greedy matching' en 'negated character classes' ... wordt tricky, wordt leuk
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
      woensdag 9 juni 2004 @ 22:43:36 #93
    693 ChOas
    ** Warning: Choking hazard **
    pi_19768312
    Oh, en ik vraag me af wie ik moet pijpen voor een fucking schouderklopje, maar daar kom ik nog wel achter
    "I contend that we are both atheists. I just believe in one fewer god than you do.
    When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours."

    [Stephen Roberts]
    pi_19769828
    quote:
    Op woensdag 9 juni 2004 22:42 schreef ChOas het volgende:
    Volgende deel regexps ga ik je apache logging gebruiken
    Right then Mocht je meer of andere logs nodig hebben weet je me te vinden. Mijn Linux doosje spuugt kilo's van die troep uit elke dag
    pi_19782914
    Ik heb de eerste drie hoodfstukken gelezen en dacht laat ik is iets zinloos gaan maken.

    Het volgende heb ik gemaak en het werkt niet
    quote:
    #!/usr/bin/perl -w
    use strict;

    my $Number;

    print "Voer een getal in onder de 10: ";

    #krijg invoer van het toetsenbord (gebruiker)
    $Number=<STDIN>;

    #Enter uit $Number halen
    chomp $Number;

    if($Number>10)
    {
    print "Het nummer is groter dan 10 dus we gaan niet tellen\n";
    }else{
    print "het nummer is kleiner dan 10. We gaan tot 25 tellen\n";

    #We gaan tot 25 tellen, met een for lus
    for($Number;$Number<25;$Number++)
    }
    De fout die ik krijd is.
    quote:
    syntax error at ./test line 22, near ")
    }"
    Execution of ./test aborted due to compilation errors.
    Wat doe ik fout want ik zie het echt niet. Het enige dat ik denk te weten is dat de fout in de for lus zit.
    pi_19783137
    quote:
    Op donderdag 10 juni 2004 14:21 schreef Wouta het volgende:
    Ik heb de eerste drie hoodfstukken gelezen en dacht laat ik is iets zinloos gaan maken.

    Het volgende heb ik gemaak en het werkt niet
    [..]

    De fout die ik krijd is.
    [..]

    Wat doe ik fout want ik zie het echt niet. Het enige dat ik denk te weten is dat de fout in de for lus zit.
    Je doet nix in de for loop... Sterker nog, je hebt geen { en } er achter gezet
    quote:
    #!/usr/bin/perl -w
    use strict;

    my $Number;

    print "Voer een getal in onder de 10: ";

    #krijg invoer van het toetsenbord (gebruiker)
    $Number=<STDIN>;

    #Enter uit $Number halen
    chomp $Number;

    if($Number>10)
    {
    print "Het nummer is groter dan 10 dus we gaan niet tellen\n";
    }else{
    print "het nummer is kleiner dan 10. We gaan tot 25 tellen\n";

    #We gaan tot 25 tellen, met een for lus
    for($Number;$Number<25;$Number++) {
    print "$Number\n";
    }

    }
    Trotse poster van het 37000000ste bericht ^O^
    pi_19783340
    quote:
    Op donderdag 10 juni 2004 14:27 schreef daReaper het volgende:

    [..]

    Je doet nix in de for loop... Sterker nog, je hebt geen { en } er achter gezet
    [..]
    Dat het ik zelf moeten kunnen verzinnen.....
      donderdag 10 juni 2004 @ 14:33:21 #98
    78498 classpc
    I don't like change
    pi_19783371
    Erg goed. Ik wil nu ook wel Perl scripten.
    Op zoek naar een nieuwe printer? Kies voor een Brother laser printer. Uiterst betrouwbaar en economisch!
    pi_19785369
    Sorry hoor dat ik weer een vraag ga stellen....

    Ik heb een vraag over het volgende voorbeeld:
    quote:
    #!/usr/bin/perl -w
    use strict;

    #Nieuwe list Fruit
    my @Fruit=('Appel','Peer','Banaan','Kiwi');

    #nieuwe scalar Index
    my $Index;

    #We gaan nu Index gebruiken om telkens een ander element uit de
    #lijst aan te wijzen... met $Lijst[0] wijzen we zoals we eerder gezien
    #hebben naar het 1e element.
    #Wanneer we Index nou van 0 tot 3 laten lopen en telkens dat element
    #afdrukken gebeurt het volgende:

    for($Index=0;$Index<4;$Index++)
    {
    print "Dit is fruit: $Fruit[$Index]\n";
    };
    Dat werkt gewoon wat ik me nu af vraag is waarom er een $ staat ipv een @ als je de fruit soorten gaat printen. Ik heb er een @ neergezet en toen ging perl heel bijdehand mij vertellen dat ik beter een $ kon gebruken. Maar helemaal snappen waarom ik geen @ moeten gebruiken daar doe ik niet.

    Iemand die dat even wat wil verhelderen ?

    [ Bericht 5% gewijzigd door Wouta op 10-06-2004 15:35:59 (quote gefixt) ]
    pi_19786369
    Ik denk omdat je steeds een scalar uit de list print en niet meteen de hele list... denk ik
    abonnement Unibet Coolblue
    Forum Opties
    Forumhop:
    Hop naar:
    (afkorting, bv 'KLB')