abonnement Unibet Coolblue Bitvavo
pi_20454193
packages lijkt me een prima idee. Misschien als "case-study" CGI?
  woensdag 7 juli 2004 @ 06:21:40 #152
693 ChOas
** Warning: Choking hazard **
pi_20456335
quote:
Op dinsdag 6 juli 2004 23:16 schreef TimberWolf het volgende:
En wie weet iets over het outputten van HTML? De 'print <<DINGES;" constructie? Het escapen van lastige codes? Wanneer wel en wanneer niet escapen enzo? Het verschil tussen "$string" en '$string'?

(Jah, allemaal dingen die ik inmiddels zelf ontdekt heb )
Die dingen pak ik er ook nog wel even bij

*noteert 'here docs', escapen codes, interpolatie*
"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]
  donderdag 8 juli 2004 @ 17:36:29 #153
693 ChOas
** Warning: Choking hazard **
pi_20493522
Okay, even ingaan op de opmerkingen van TimberWolf:

Allereerst: Here documents

Stel nou dat ik wat HTML uit een Perl programma wil printen... dan kan dat zo:

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

use strict;

my $Name='ChOas';

print "<HTML>\n";
print " <H1> Hi there, my name is $Name </H1>\n";
print "</HTML>\n";

---

Nou, dat ziet er makkelijk uit (had ook op 1regel kunnen staan, maar dit vind ik netter...

Output:

ChOas-Computer:~/fok choas$ ./les18
<HTML>
<H1> Hi there, my name is ChOas </H1>
</HTML>


Dat het werkt hadden we wel kunnen raden, maar de HTML code is niet echt duidelijk te zien
tussen de code dus dat sucked... een oplossing daarvoor zijn zogenaamde 'here documents'
Bij een here document geef je door een markering bij de print aan tot waar je wil printen, wanneer Perl dan de markering die je hebt opgegeven tegenkomt stopt het printen...

Als voorbeeldmarkering gebruik ik hier: EINDHTML

---
print <<ENDHTML;
<HTML>
<H1> Hi there, my name is $Name </H1>
</HTML>
ENDHTML

---

En je zal zien dat de output gelijk is aan het vorige voorbeeld... Je HTML code is zo veel beter te zien, en te onderhouden. Dit zijn dus here documents in het kort...

Nu iets over interpolatie.

We hebben gezien dat we de meeste waarden van dingen (behalve getallen) meestal tussen dubbele quotes zetten, dubbele quotes betekent dat Perl variabelen in die string interpoleert, en ze vervangt door de waarde van die variabelen. Wanneer we echter het zooitje tussen enkele quotes gooien dan wordt dit niet gedaan. Zie dit voorbeeld:

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

use strict;

my $Name='ChOas';

print "My name is $Name\n";
print 'My name is $Name\n';

---

Output:

ChOas-Computer:~/fok choas$ ./les19
My name is ChOas
My name is $Name\nChOas-Computer:~/fok choas$


Je ziet dus uit het voorgaande voorbeeld dat zelfs de \n niet naar een enter wordt geinterpoleerd, maar echt als \ n gezien wordt.

Nog een voorbeeldje:

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

use strict;

my @Colour=('Red','Black','Grey','Green');

print "Colour-double_quote: @Colour";
print "\n";
print 'Colour-single_quote: @Colour';
print "\n";
print 'Colour-no_quote: ';
print @Colour;
print "\n";

---

Ik heb de losse enters er even tussen gezet om het wat duidelijker te maken.

Output:

ChOas-Computer:~/fok choas$ ./les19
Colour-double_quote: Red Black Grey Green
Colour-single_quote: @Colour
Colour-no_quote: RedBlackGreyGreen
ChOas-Computer:~/fok choas$


Hier zie je dus dat Perl een array met dubbele quotes interpoleert door een spatie tussen de elementen te zetten, met gebruik van een enkele quote wordt er niets geinterpoleerd, en zonder quotes worden de waarden uit de array zonder spatie afgedrukt.

Nou, dat was alvast 2 vragen

En dan nu... hoe ga ik in godsnaam uitleggen wat je wel en niet moet escapen ???

Eeerm mijn tip: Probeer eerst zonder iets te escapen, en werkt dat niet, doe het dan wel

Sorry, maar er zijn ZO VEEL verschillende gevallen... ik kan je alleen maar vertellen dat je er gevoel voor moet krijgen. Op een gegeven moment weet je precies wat je waar moet gebruiken.

Als ik wat goeds kan verzinnen over escapen laat ik het weten... maar vooralsnog gaan we hierna eerst het begrip 'scope' behandelen... dingen weten over scope is handig voor wanneer we straks *diepe zucht* packages en OO-Perl gaan behandelen...

"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_20493907
nog even over die "here documents":

let er op dat je het einde aan het begin van de regel zet:

goed:
-----
  print <<END;
  <html>
  <h1>tekstje</h1>
  </html>
END
-----

goed fout:
-----
  print <<END;
  <html>
  <h1>tekstje</h1>
  </html>
  END
-----

Dat "END", of wat je dan ook hebt gekozen als delimiter, moet dus aan het begin van de regel staan
Trotse poster van het 37000000ste bericht ^O^
pi_20496091
Even pietleut mode aan: de "<<" input redirector operator komt oorspronkelijk uit de borne-shell (en zit in veel moderne shells zoals bash of tcsh). Net als enkele en dubbele quotes. Voor meer informatie hierover kun je dus ook zoeken in de manual van sh (onder linux is dat meestal de borne-again-shell).
pi_20500822
Het is ook goed op te merken dan 'print << END;' niet hetzelfde is als 'print <<END;'. De eerste variant werkt niet, de 2e wel.
  woensdag 14 juli 2004 @ 17:38:57 #157
693 ChOas
** Warning: Choking hazard **
pi_20623179
Ik heb hier heel erg tegenop gezien omdat het concept voor een hoop mensen moeilijk te begrijpen is...

Maarrrrrr... ik proberen vanavond het eerste gedeelte van object georienteerd programeren in Perl te posten...

GrtZ!
"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_20625263
Yay! Ik ben erg benieuwd!

*gespannen afwacht*
  woensdag 14 juli 2004 @ 21:11:51 #159
693 ChOas
** Warning: Choking hazard **
pi_20626970
Okay... hier gaan we dan, ik ben meer gewend dit uit te leggen op een bord enzo, met tekeningetjes, dus dit gaat lastig worden... ik ga jullie een aantal dingen vertellen en jullie moeten me maar gewoon geloven dat het waar is. bij vragen zal ik dieper ingaan op begrippen zoals namespace enzo.

"Trust in me... said the devil" [ChOas]

We kunnen het hierna veel ingewikkelder maken, maar eerst een korte uitleg wat OO programeren eigenlijk is.

Wat is een object ? ... nou, kijk om je heen, alles bestaat uit objecten, objecten hebben eigenschappen die verbonden zijn aan een object (e.g. een blikje bier (*grin*, ja ik ben om me heen aan het kijken) kan je weggooien, crushen, leegdrinken. Een tv kan je ook weggooien, maar crushen wordt al wat lastiger, en leegdrinken raad ik echt niet aan. Wat het echter wel allebei zijn is gebruiksvoorwerpen.

Dus als we object georienteerd gaan denken hebben we een classe van 'gebruiksvoorwerpen' waar 'blikjes' en 'tvs' deel van uitmaken. blikjes hebben de eigenschap dat ze leeggedronken kunnen worden, en tvs hebben de eigenschap dat ze aan en uit gezet kunnen worden.

Volgen we het nog ?

Mooi, ga ik ff een biertje halen.

... Zo...

Voor de rest van deze uitleg ga ik gebruikmaken van Randal Schwartz's perlboot (OO programeren voor beginners) het zal geen rechtstreekse vertaling zijn, maar ik ga zijn voorbeelden gebruiken, want het tekent hier zo lastig op een bord .

Op de boerderij!

We gaan een aantal subroutines maken om het geluid van verschillende dieren aan te geven, dat doen we als volgt... eerste gedeelte van de naam is de naam van het dier, dan :: en dan het woord geluid (waarom we het zo doen kom ik nog op). Al in de war ? ... Misschien maakt dit het duidelijk:

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

use strict;

sub Schaap::geluid
{
print "Een schaap maakt dit geluid: Beeeeeeh\n";
};

sub Koe::geluid
{
print "Een koe maakt dit geluid: Boeoeoeoe\n";
};

sub Kip::geluid
{
print "Een kip maakt dit geluid: Tok Tok Tok\n";
};


Schaap::geluid
Koe::geluid
Kip::geluid

---

BRILJANT!!!... ik kan niet anders zeggen!!!... En de output:

---
ChOas-Computer:~/fok choas$ ./oo1
Een schaap maakt dit geluid: Beeeeeeh
Een koe maakt dit geluid: Boeoeoeoe
Een kip maakt dit geluid: Tok Tok Tok
ChOas-Computer:~/fok choas$
---

Tot zover niets aan de hand...

Dus laten we wat nieuws proberen...

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

use strict;
#no strict 'refs';

sub Schaap::geluid
{
print "Een schaap maakt dit geluid: Beeeeeeh\n";
};

sub Koe::geluid
{
print "Een koe maakt dit geluid: Boeoeoeoe\n";
};

sub Kip::geluid
{
print "Een kip maakt dit geluid: Tok Tok Tok\n";
};

for my $Dier ('Koe','Schaap','Koe','Schaap','Kip')
{
&{$Dier . "::geluid"};
};

---

Wat je moet weten is dit... we hebben het al gehad over de-refereren toch ? ... no, zoals je een scalar mer ${} de-refereert, een array met @{}, en een hash met %{} de-refereer je een subroutine met &{}.

Dus in het loopje wat je ziet zal elke keer een nieuw dier voor $_ worden ingevuld, en de functie die daar bij hoort worden uitgevoerd.

...

NOT! Jullie die deze code hebben geprobeert zullen zien dat Perl zo'n soort klacht geeft wanneer we dit proberen: Can't use string ("Koe::geluid") as a subroutine ref while "strict refs" in use at ./oo1 line 22.

Om dit voorbeeld toch te laten werken voegen spelen we even vals, en voegen we "no strict 'refs'" toe onder 'use strict' ... tis valsspelen, en de mensen die geinteresseerd zijn waarom we dit moeten doen moeten het maar vragen...

Maar.. we zien dat de code werkt.

Latgen we het netter doen... Jullie hebben namelijk net jullie eerste 3 objecten gemaakt...

IS DAT ZO CHOAS ????

Ja klas, dat is zo

Door de dubbele punt in de functienaam geef je eigenlijk aan: object :: eigenschap ...
Dat is cool!.. en het leuke is dat je ook direct van eigenschappen gebruik kan maken zonder dat omslachtige de-refereren (waar use strict zo over ging zeiken)

Een eigenschap van een object gebruiken doen we zo object->eigenschap.

Even laten zien:

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

use strict;

sub Schaap::geluid
{
print "Een schaap maakt dit geluid: Beeeeeeh\n";
};

sub Koe::geluid
{
print "Een koe maakt dit geluid: Boeoeoeoe\n";
};

sub Kip::geluid
{
print "Een kip maakt dit geluid: Tok Tok Tok\n";
};

for my $Dier ('Koe','Schaap','Koe','Schaap','Kip')
{
$Dier->geluid;
};

---

Output:

---
ChOas-Computer:~/fok choas$ ./oo1
Een koe maakt dit geluid: Boeoeoeoe
Een schaap maakt dit geluid: Beeeeeeh
Een koe maakt dit geluid: Boeoeoeoe
Een schaap maakt dit geluid: Beeeeeeh
Een kip maakt dit geluid: Tok Tok Tok
ChOas-Computer:~/fok choas$
---

Nou, dat was het allereerste gedeeltje object georienteerd programeren... deze voorbeelden waren nog totaal nutteloos, maar ik zal later laten zien hoe we door een nieuw object 'Dier' te maken we hier de code kunnen vereenvoudigen, en nog veel meer leuke dingen kunnen doen.

Nu eerst mijn biertje opdrinken, en misschien zo nog een deel
"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 14 juli 2004 @ 22:01:09 #160
693 ChOas
** Warning: Choking hazard **
pi_20628318
ChOas, ChOas!!!

Jaaaaa ??

Wanneer we de eigenschap van een object aanroepen, staat er dan net zoals bij een functie wat in
@_ ???? ...

Nou... laten we eens kijken:

---
[i]#!/usr/bin/perl -w

use strict;

sub Schaap::geluid
{
print "\@_ is: @_\n";
print "Een schaap maakt dit geluid: Beeeeeeh\n";
};

sub Koe::geluid
{
print "\@_ is: @_\n";
print "Een koe maakt dit geluid: Boeoeoeoe\n";
};

sub Kip::geluid
{
print "\@_ is: @_\n";
print "Een kip maakt dit geluid: Tok Tok Tok\n";
};

for my $Dier ('Koe','Schaap','Kip')
{
$Dier->geluid;
};

---

En de output:

---
ChOas-Computer:~/fok choas$ ./oo2
@_ is: Koe
Een koe maakt dit geluid: Boeoeoeoe
@_ is: Schaap
Een schaap maakt dit geluid: Beeeeeeh
@_ is: Kip
Een kip maakt dit geluid: Tok Tok Tok
ChOas-Computer:~/fok choas$
---

Hmmmmmmm is dat eens interessant, het eerste elemennt van @_ is het type object wat we aanroepen...

Laten we de code eens zo herschrijven:

---

#!/usr/bin/perl -w

use strict;

sub Schaap::geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: Beeeeeeh\n";
};

sub Koe::geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: Boeoeoeoe\n";
};

sub Kip::geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: Tok Tok Tok\n";
};

for my $Dier ('Koe','Schaap','Kip')
{
$Dier->geluid;
};

---

Met de output:

---
ChOas-Computer:~/fok choas$ ./oo2
Een Koe maakt dit geluid: Boeoeoeoe
Een Schaap maakt dit geluid: Beeeeeeh
Een Kip maakt dit geluid: Tok Tok Tok
ChOas-Computer:~/fok choas$
---

Hmmmmmm... ziet er goed uit... de functies van de dieren gaan meer en meer op elkaar lijken...

Nog een stapje verder, we maken voor elk dier een subroutine 'lawaai' welke alleen maar het lawaai van het dier teruggeeft... maarja, elke subroutine 'lawaai' moet iets specifieks voor een bepaald dier terug geven. en hoe weet Perl nou welk 'lawaai' bij welk dier hoort ?

Antwoord: packages...

Ik ga even niet in op de details (vragen staat vrij), maar een package is een specifieke namespace voor een object waarbinnen alle variabelen en functies alleen maar toepassing hebben op dat specifieke object (heb je 'm nog?) ... is zo heel moeilijk uitleggen dit, maar neem dit van me aan:

We zeggen eigenlijk dat een package een object is... dus een Koe omschrijven we zo:

{
package Schaap;
sub Lawaai { return 'Beeeeeeh' };
sub Geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: ", $DitDier->Lawaai, "!\n";
}
};


Dus het object Schaap heeft 2 aan zich verbonden eigenschappen: Lawaai en Geluid.

Weer even de totale code zoals we hem dan nu hebben:

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

use strict;

{
package Schaap;
sub Lawaai { return 'Beeeeeeh' };
sub Geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: ", $DitDier->Lawaai, "!\n";
}
};

{
package Koe;
sub Lawaai{ return 'Boeoeoeoe' };
sub Geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: ", $DitDier->Lawaai, "!\n";
}
};

{
package Kip;
sub Lawaai{ return 'Tok Tok Tok' };
sub Geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: ", $DitDier->Lawaai, "!\n";
}
};

for my $Dier ('Koe','Schaap','Kip')
{
$Dier->Geluid;
};


---

Het lijkt wel of we alleen maar meer en meer code schrijven he ? ... klopt ... maar wat valt er nou op aan de code die we nu hebben ?

Nou... dat Geluid universeel is... stel je voor dat we een varken toevoegen, verandert Lawaai wel, maar Geluid is ook weer voor een varken precies hetzelfde... Sterker nog... Geluid zou voor elk dier hetzelfde zijn, het is alleen maar het Lawaai wat varieert...

Wacht eens even... ELK DIER produceert geluid, dus geluid is eigenlijk een hogere functie welke dieren met elkaar delen!!!

DAAR GAAN WE GEBRUIK VAN MAKEN!!!

@ISA

Dit moet je lezen als IS A (Is een) ... We gaan een package 'Dier' maken met als eigenschap 'Geluid', en dan hoeven wel alleen maar tegen de kip, koe, en het schaap te zeggen dat ze een dier zijn!!!

Dus we gaan zeggen een Koe IS EEN Dier...

Verward ?

De code:

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

use strict;

{
package Dier;
sub Geluid
{
my $DitDier=shift;
print "Een $DitDier maakt dit geluid: ", $DitDier->Lawaai, "!\n";
}
};

{
package Schaap;
@Schaap::ISA='Dier';
sub Lawaai { return 'Beeeeeeh' };
};

{
package Koe;
@Koe::ISA='Dier';
sub Lawaai{ return 'Boeoeoeoe' };
};

{
package Kip;
@Kip::ISA='Dier';
sub Lawaai{ return 'Tok Tok Tok' };
};

for my $Dier ('Koe','Schaap','Kip')
{
$Dier->Geluid;
};

---

Dit heet erven, sinds een Koe een dier is, erft een Koe de eigenschap 'Geluid' van Dier...

Tot nu toe heb je hier nog helemaal niets aan, maar binnenkort (waarschijnlijk zaterdag ochtend) zal ik het volgende deel schrijven en dan gaan we nog wat leuke en interessante dingetjes bekijken bij objecten...

Ik weet dat deze laatste 2 dingen vrij lastig te volgen waren, maar geloof me, het gaat echt logischer worden...

Komende dagen heb ik hopelijk wel tijd om vragen te beantwoorden, dus mocht er iets zijn: Vraag het
"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]
  donderdag 15 juli 2004 @ 07:43:27 #161
693 ChOas
** Warning: Choking hazard **
pi_20634896
Dat enthousiasme!

Ik ga werken, kijk vanavond wel of er vragen zijn, en MISSCHIEN (afhankelijk van alcohol gebruik nog een 3e deel OO programeren...
"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_20635023
quote:
Op woensdag 14 juli 2004 21:11 schreef ChOas het volgende:
Wat je moet weten is dit... we hebben het al gehad over de-refereren toch ? ... no, zoals je een scalar mer ${} de-refereert, een array met @{}, en een hash met %{} de-refereer je een subroutine met &{}.
Hebben we het over de-refereren gehad?

Verder denk ik gewoon duidelijk. Is alleen in deze context wel lastig om te zien wat daar een praktische toepassing van zou zijn. De laatste keer dat ik snel moest uitzoeken wat voor geluid een boerderijdier maakte was ik ongeveer 3 Niets ten nadele overigens, de uitleg is prima. Misschien is het handig om bij dit soort onderwerpen aan te geven waarvoor het gebruikt kan worden? (Template engines bijvoorbeeld)
pi_20635027
Eindelijk OO

Ben blij dat ik het concept van OO al begrijp
Als ik vanmiddag terug kom van mn werk ga ik het meteen ff een beetje uitproberen!

thanks Ch0as!
Trotse poster van het 37000000ste bericht ^O^
pi_20635052
Voor de mensen die nog steeds nix snappen van het hele OO concept heb ik hier hoofdstuk 1 uit een C++ tutorial: http://www.briceg.com/ticpp/one/Chapter01.html

Hierin wordt heel gedetailleerd het wat, hoe en waarom uitgelegd. Da's waar ik het zelf ook uit heb geleerd
Trotse poster van het 37000000ste bericht ^O^
  donderdag 15 juli 2004 @ 22:33:04 #165
693 ChOas
** Warning: Choking hazard **
pi_20652670
quote:
Op donderdag 15 juli 2004 08:11 schreef TimberWolf het volgende:

[..]

Hebben we het over de-refereren gehad?
Ja :
quote:
Antwoord: de-refereren

Voor een array als volgt: @{$ArrayRef};
Voor een hash: %{$HashRef};
Uit: Leer hier Perl (8 Juni)
"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]
  donderdag 15 juli 2004 @ 22:43:28 #166
693 ChOas
** Warning: Choking hazard **
pi_20652911
Ben trouwens niet coherent genoeg voor deel 3 van OO programeren, dus dat volgt Zaterdag ochtend...
"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_20653425
Mensen die ongeduldig zijn kunnen overigens ook man perlboot doen.
pi_20655545
quote:
Op donderdag 15 juli 2004 22:33 schreef ChOas het volgende:

[..]

Ja :
[..]

Uit: Leer hier Perl (8 Juni)
Ho, pardon Was niet blijven hangen

Hele OO gebeuren fascineert me mateloos. Hergebruiken van code, en het hele object gebeuren, super!

Los vraagje: Gaan we het op een gegeven moment ook nog over sockets hebben? Lijkt me namelijk ook wel stoer
  vrijdag 16 juli 2004 @ 06:29:29 #169
693 ChOas
** Warning: Choking hazard **
pi_20658040
quote:
Op vrijdag 16 juli 2004 00:25 schreef TimberWolf het volgende:

[..]

Ho, pardon Was niet blijven hangen

Hele OO gebeuren fascineert me mateloos. Hergebruiken van code, en het hele object gebeuren, super!

Los vraagje: Gaan we het op een gegeven moment ook nog over sockets hebben? Lijkt me namelijk ook wel stoer
Ja, we gaan het over sockets hebben ... Komt hierna

Bij het hoofdstuk 'gebruik van modules' ... Sockets, CGI, etc, etc, etc... Ik zit er over te denken om (lijkt me leuk samen met mensen die het leuk lijken) een IRC-bot te bouwen ofzo... dus dat jullie features aandragen en ideeeen om ze te implementeren en dan kijken hoe dat het beste te doen, inclusief webstats bijhouden enzo...

Lijkt jullie dat wat ?
"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_20658444
quote:
Op vrijdag 16 juli 2004 06:29 schreef ChOas het volgende:

[..]

Ja, we gaan het over sockets hebben ... Komt hierna

Bij het hoofdstuk 'gebruik van modules' ... Sockets, CGI, etc, etc, etc... Ik zit er over te denken om (lijkt me leuk samen met mensen die het leuk lijken) een IRC-bot te bouwen ofzo... dus dat jullie features aandragen en ideeeen om ze te implementeren en dan kijken hoe dat het beste te doen, inclusief webstats bijhouden enzo...

Lijkt jullie dat wat ?
Heb ik helaas al gedaan
In low-level sockets nog wel Eentje die tegerlijk ook nog allemaal ftpconnecties open had enzo. Met nonblocking sockets, waarbij hij ze allemaal 1 voor 1 steeds langs ging om te kijken of er nog iets nieuws was
Trotse poster van het 37000000ste bericht ^O^
  vrijdag 16 juli 2004 @ 08:51:30 #171
693 ChOas
** Warning: Choking hazard **
pi_20658560
quote:
Op vrijdag 16 juli 2004 08:34 schreef daReaper het volgende:

[..]

Heb ik helaas al gedaan
In low-level sockets nog wel Eentje die tegerlijk ook nog allemaal ftpconnecties open had enzo. Met nonblocking sockets, waarbij hij ze allemaal 1 voor 1 steeds langs ging om te kijken of er nog iets nieuws was


Okay, wat wil JIJ dan doen ?

Ik probeer ook maar wat te verzinnen, input is welkom hoor...

Hou je er wel rekening mee dat er een aantal mensen zijn die dit topic volgen tot 1.5 maand
geleden dachten dat iemand het over een brillenzaak had wanneer je 'Perl' zei ?
"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_20658583
quote:
Op vrijdag 16 juli 2004 08:51 schreef ChOas het volgende:

[..]



Okay, wat wil JIJ dan doen ?

Ik probeer ook maar wat te verzinnen, input is welkom hoor...

Hou je er wel rekening mee dat er een aantal mensen zijn die dit topic volgen tot 1.5 maand
geleden dachten dat iemand het over een brillenzaak had wanneer je 'Perl' zei ?
Nee sockets zijn goed hoor Ik geef alleen te kennen dat ik ze al ken Mij hoor je verder niet klagen Je doet het zeer goed. Iedereen wil altijd maar PHP leren, omdat het makkeliker is, terwijl Perl gewoon beter is. Goeie zaak
Trotse poster van het 37000000ste bericht ^O^
  vrijdag 16 juli 2004 @ 11:11:54 #173
50936 The_Hives
Is nu tripple oom Hives O+ !!!
pi_20660352
tvp
AFC AJAX Kampioen 2012-2013
Fok! Federatie
1918,1919,1931,1932,1934,1937,1939,1947,1957,1960,1966,1967,1968,1970,1972,1973,1977,1979,1980 1982,1983,1985,1990,1994,1995,1996,1998,2002,2004,2011,2012,2013
pi_20660819
quote:
Op vrijdag 16 juli 2004 08:34 schreef daReaper het volgende:
nonblocking sockets, waarbij hij ze allemaal 1 voor 1 steeds langs ging om te kijken of er nog iets nieuws was
Als er geen select-achtige (ala select(2)) functie in perl zit, is het imho geen geschikte taal voor sockets en die is er gelukkig wel, scheelt een hoop werk

Voor het vervolg van de cursus zou gedacht kunnen worden aan bv
  • verder gaan met OO, ik weet niet of dat te hoog gegrepen is
  • sockets, is imho niet zo interresant onderwerp. Stream-sockets zijn als ze geopened zijn net filedescriptors. Wordt interresant als je er een applicatie omheen hangt, zoals bv een chat-servertje, maar dan wordt het weer te lang.
  • databases, misschien leuk, misschien niet. Vraagt alleen wel van de student dat hij bv mysql heeft geinstalleerd.
  • cgi, kan ook leuk zijn, maar erg praktisch gericht.

    Iemand nog meer ideeen?
  •   vrijdag 16 juli 2004 @ 16:12:00 #175
    693 ChOas
    ** Warning: Choking hazard **
    pi_20666329
    Voor de IRCers:

    irc.fok.nl / #leerhierperl



    Ben een beetje aan het experimenteren daar
    "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_20671005
    server sockets heb ik trouwens nog niet zo onder de knie
    met dat gefork enzo

    die mag ook nog wel
    Trotse poster van het 37000000ste bericht ^O^
    pi_20679408
    Qua dingen die lang kunnen komen:

    Modules, roll your own (Net mijn eerste gemaakt, yay!)
    Kort langs de belangrijke modules (LWP, CGI, TK, enz)
    Sockets

    Overigens lijkt me het bouwen van een IRC botje (En dan meteen met stat-logging naar een database, heb je dat ook gehad) erg leuk. Ik wil, tijd en werk permitterend, zelf wel helpen knutselen

    Misschien leuk om eens een perl script van een van de meelezers (ik heb wel wat liggen ook) door te werken om te kijken hoe het beter kan ofzo?
    pi_20679436
    quote:
    Op zaterdag 17 juli 2004 00:35 schreef TimberWolf het volgende:
    Qua dingen die lang kunnen komen:

    Modules, roll your own (Net mijn eerste gemaakt, yay!)
    Kort langs de belangrijke modules (LWP, CGI, TK, enz)
    Sockets

    Overigens lijkt me het bouwen van een IRC botje (En dan meteen met stat-logging naar een database, heb je dat ook gehad) erg leuk. Ik wil, tijd en werk permitterend, zelf wel helpen knutselen

    Misschien leuk om eens een perl script van een van de meelezers (ik heb wel wat liggen ook) door te werken om te kijken hoe het beter kan ofzo?
    Die van mijn site kan ongetwijfeld beter
    Ik ben er mee begonnen toen ik nog niet heel goed Perl kon... Ik zit alleen ff te denken of ik die, al dan niet als geheel, wil gaan vrij geven ...
    Trotse poster van het 37000000ste bericht ^O^
    pi_20909445
    Vraagje, en schop:

    Kan ik delen van een module importeren? Dus iets als 'use Image::Magick(Crop, Ping, Read, Write);' ofzo?
      woensdag 28 juli 2004 @ 13:59:22 #180
    693 ChOas
    ** Warning: Choking hazard **
    pi_20909530
    quote:
    Op woensdag 28 juli 2004 13:55 schreef TimberWolf het volgende:
    Vraagje, en schop:

    Kan ik delen van een module importeren? Dus iets als 'use Image::Magick(Crop, Ping, Read, Write);' ofzo?
    Sorry, sterfgeval in de familie, ik kom over een tijdje weer actief posten...

    antwoord: Ja

    use Image::Magick qw/Crop Ping Read Write/;

    qw is eigenlijk 'quote word' dus er had ook kunnen staan:

    use Image::Magick ('Crop', 'Ping', 'Read', 'Write');
    "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_20909878
    quote:
    Op woensdag 28 juli 2004 13:59 schreef ChOas het volgende:
    Sorry, sterfgeval in de familie, ik kom over een tijdje weer actief posten...
    Sterkte man. Ik weet hoe moeilijk het is.
    quote:
    use Image::Magick qw/Crop Ping Read Write/;
    Thanks! Dat scheelt wellicht in geheugengebruik
    pi_20950235
    Kee, nog een vraag (Hier maar even, wegens geen groot perl vragentopic).

    Zijn perl variabelen altijd global? Dus is het altijd zo dat een variabele in het lopende programma ook beschikbaar is voor de subroutines in dat programma? Ik denk, ik vraag het maar voor ik me gigantisch in mijn vingers snijdt Ik weet namelijk dat het wel zo werkt (ze lijken global te zijn), maar of dat zo hoort is me onduidelijk.
    pi_20952593
    quote:
    Op vrijdag 30 juli 2004 11:23 schreef TimberWolf het volgende:
    Kee, nog een vraag (Hier maar even, wegens geen groot perl vragentopic).

    Zijn perl variabelen altijd global? Dus is het altijd zo dat een variabele in het lopende programma ook beschikbaar is voor de subroutines in dat programma? Ik denk, ik vraag het maar voor ik me gigantisch in mijn vingers snijdt Ik weet namelijk dat het wel zo werkt (ze lijken global te zijn), maar of dat zo hoort is me onduidelijk.
    als je hem met `my` definieert, is hij alleen toegankelijk vanuit het blok waarin je dat doet + zijn subblokken

    #####################
    use strict;
    my $a = 5;
    {
    my $b = 10;
    print $a+$b; # goed
    }
    print $a+$b; # niet goed, want $b kent hij niet
    #####################

    als je `use strict;` gebruikt, verplicht hij je het gebruik van `my`

    #####################
    $a = 5;
    {
    $b = 10;
    print $a+$b; # goed
    }
    print $a+$b; # goed
    Trotse poster van het 37000000ste bericht ^O^
    pi_20954519
    Helemaal duidelijk Oftewel: Vars die global moeten zijn, moet je buiten een blok definieren. Nu nog wat andere probleempjes oplossen, en ik kan weer verder spelen
    pi_20954558
    quote:
    Op vrijdag 30 juli 2004 14:31 schreef TimberWolf het volgende:
    Helemaal duidelijk Oftewel: Vars die global moeten zijn, moet je buiten een blok definieren. Nu nog wat andere probleempjes oplossen, en ik kan weer verder spelen
    precies
    succes
    Trotse poster van het 37000000ste bericht ^O^
      vrijdag 30 juli 2004 @ 14:34:32 #186
    693 ChOas
    ** Warning: Choking hazard **
    pi_20954601
    Je kan trouwens ook binnen een blok een global variabele locaal maken, waar dat nuttig voor is leg ik nog wel eens uit, maar zo werkt het:

    #!/usr/bin/perl -w

    use strict;

    my $a=5

    print "a: $a\n";
    {
    local $a=10;
    print "a: $a\n";
    };
    print "a: $a\n";
    "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_25215831
    Hallo,
    Ik heb een lijst met hardware adressen van netwerkkaarten, maar wil deze in een ander formaat hebben. Ik weet dat ik dit kan doen met Perl, maar het lukt me niet.

    Dit is het huidige formaat: 0008.021d.53c0
    En dit zou het moeten worden: 00:08:02:1d:53:c0

    Kan iemand me hierbij helpen?
    pi_25215948
    quote:
    Op vrijdag 4 juni 2004 20:01 schreef ChOas het volgende:
    Nou... positieve reacties tot nu toe, en ik heb geen leven dus deel 2...
    Nou dat wist ik al Maarre leuk geschreven. Kheb er een bookmarkje van gemaakt dus zal hem thuis eens lezen
    Mijn games
    He jij daar! ja jij! Doorlopen nu!
    pi_25216110
    ik ga dit zeker een keer proberen

    tvpje dus
    pi_25216257
    Mooie zet. Ik ga binnenkort hier ook eens mee stoeien.
    pi_25217462
    quote:
    Op woensdag 23 februari 2005 15:44 schreef Werewolf het volgende:
    Hallo,
    Ik heb een lijst met hardware adressen van netwerkkaarten, maar wil deze in een ander formaat hebben. Ik weet dat ik dit kan doen met Perl, maar het lukt me niet.

    Dit is het huidige formaat: 0008.021d.53c0
    En dit zou het moeten worden: 00:08:02:1d:53:c0

    Kan iemand me hierbij helpen?
    als alle adressen bestaan uit 4x cijfer/letter, punt, 4x cijfer/letter, punt, 4x cijfer/letter, zou dit moeten werken:

    $address =~ s/^(\w{2})(\w{2})\.(\w{2})(\w{2})\.(\w{2})(\w{2})$/$1:$2:$3:$4:$5:$6/;

    succes
    Trotse poster van het 37000000ste bericht ^O^
      woensdag 23 februari 2005 @ 18:56:57 #192
    693 ChOas
    ** Warning: Choking hazard **
    pi_25218475
    quote:
    Op woensdag 23 februari 2005 17:53 schreef daReaper het volgende:

    [..]

    als alle adressen bestaan uit 4x cijfer/letter, punt, 4x cijfer/letter, punt, 4x cijfer/letter, zou dit moeten werken:

    $address =~ s/^(\w{2})(\w{2})\.(\w{2})(\w{2})\.(\w{2})(\w{2})$/$1:$2:$3:$4:$5:$6/;

    succes
    of (wanneer je zeker bent van je input)

    $Address=~s/(\w{2})\.?/$1:/g;
    chop $Address;

    Is waarschijnlijk niet efficienter, maar geen zin om te benchmarken

    Cool dat het topic nog loopt

    Al verteld dat ik een vriendin heb ?
    "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_25222364
    quote:
    Op woensdag 23 februari 2005 18:56 schreef ChOas het volgende:
    Al verteld dat ik een vriendin heb ?
    Nuecken is aanzienlijk leuker dan Perl

    Overigens zou het volgens mij ook wel met iets printf-erigs kunnen. En tsja, sed en awk zijn ook je vriendjes. Alsmede de global-replace van vi(m). En als ik me gek maak verzin ik nog wel een niet-perl methode, die aanzienlijk meer 'hacker' is

    Overigens verlate dank voor de cursus Mijn eerste programma is volledig in gebruik, en werkt geweldig Nu nog een mailinterface intergreren in de code, zonder commandline functionaliteit te verliezen. Fun project! (Je kunt wel zien, ik heb geen vriendin...)
    pi_25224982
    quote:
    Op woensdag 23 februari 2005 18:56 schreef ChOas het volgende:

    [..]

    of (wanneer je zeker bent van je input)

    $Address=~s/(\w{2})\.?/$1:/g;
    chop $Address;

    Is waarschijnlijk niet efficienter, maar geen zin om te benchmarken

    Cool dat het topic nog loopt

    Al verteld dat ik een vriendin heb ?
    Kan ze ook Perl?
    Of is ze een PHP 'er ?

    Trotse poster van het 37000000ste bericht ^O^
    pi_27814923
    Heeft er iemand een werkend voorbeeld van een object orienteerd programma in perl???

    als het kan met database en zo

    thx
      donderdag 10 augustus 2006 @ 12:15:46 #196
    120235 skippy22
    Potente kangoeroe
    pi_40680489
    <skippy> #!/usr/bin/perl
    <skippy> use IO::Socket;
    <skippy> my $sock = new IO::Socket::INET (
    <skippy> PeerAddr => '10.0.0.6',
    <skippy> PeerPort => '80',
    <skippy> Proto => 'tcp',
    <skippy> );
    <skippy> wat doe ik hoer fout
    <skippy> hier
    <skippy>
    <skippy> ./test.pl: line 3: use: command not found
    <skippy> ./test.pl: line 4: syntax error near unexpected token `('
    <skippy> ./test.pl: line 4: `my $sock = new IO::Socket::INET ('
    <skippy> skippy@debian:~/perl1$
    Wat doe ik fout ??
      donderdag 10 augustus 2006 @ 12:44:05 #197
    693 ChOas
    ** Warning: Choking hazard **
    pi_40681104
    quote:
    Op donderdag 10 augustus 2006 12:15 schreef skippy22 het volgende:

    Wat doe ik fout ??
    Tot nu toe niets.. doe eens 'which perl' op je commandline ?
    "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]
      donderdag 10 augustus 2006 @ 17:15:25 #198
    120235 skippy22
    Potente kangoeroe
    pi_40688295
    Hij doet het al was een foutje van mij
    pi_40688340
    Lees post
    Op dinsdag 2 september 2008 22:59 schreef Danny het volgende:
    sorry.
    leukste topic aller tijden
    Voor computergerelateerde vragen klik hier
      vrijdag 21 september 2007 @ 15:31:56 #200
    8372 Bastard
    Persona non grata
    pi_53358212
    quote:
    Op vrijdag 4 juni 2004 15:52 schreef ChOas het volgende:
    Perl Tutorial:

    Ik zit ziek thuis en verveel me dus ik ga jullie ook maar vervelen...

    Perl is een leuke programeertaal en makkelijk om te leren...

    Wanneer Je een unix variant gebruikt staat Perl hoogst waarschijnlijk op je systeem. Wanneer je een MS product gebruikt kan je hier Perl downloaden: http://www.activestate.com/Products/ActivePerl/?_x=1

    PHP lijkt een beetje op Perl, met nadruk op 'lijkt'.

    Hier de eerste stappen, wanneer iemand meer wil horen/leren laat het dan weten.

    Ik neem aan dat waneer je dit leest je een beetje kan programeren, maar zo niet, geen nood, ik hou het in het begin simpel...

    Datacontainers:

    Perl heeft 3 datacontainers (iets waar je informatie in kan stoppen)

  • Scalars, aangeduid door een $ <- Hier stop je bijvoorbeeld zinnen of getallen in.
  • Lists, aangeduid door een @ <- Hier kan je een lijst van dingen scalars instoppen.
  • Hashes, aangeduid door een % <- Dit is een associatieve lijst, dit leg ik later nog wel uit (als er ooit iemand geinteresseerd is).

    Input, Output:

    zoals ik zei, in het begin houden we het simpel, output schrijf je naar het scherm doormiddel van print.

    Input krijg je van de gebruiker (uitgaande van een toetsenbord in het begin) door <STDIN>.

    Regels sluit je af door middel van een ;

    Ons eerste programma:

    We schrijven een programma wat aan de gebruiker vraagt hoe oud hij/zij is, en dit dan weer afdrukt.

    Een Perl programma bestaat uit een text bestand wat geinterpreteerd wordt door Perl...

    DE manier om netjes je bestand te beginnen is (buiten dat Perl misschien bij jou op een andere locatie staat) als volgt:

    #!/usr/bin/perl -w

    use strict;


    De -w geeft aan dat je waarschuwingen van Perl wil hebben wanneer er iets fout dreigt te gaan, en 'use strict' geeft aan dat je een standaard module van Perl wil gebruiken welke je helpt fouten sneller op te sporen (Voor de Perlgoden: Ja, ik weet dat het strict namespace, en etc. is, maar ik leg het even zo uit).

    Nog even iets... wanneer je in Perl een container wil gebruiken dan zeg je van tevoren tegen Perl dat je WEET dat je die container gaat gebruiken, dit doe je door middel van 'my' ... dus met 'my $Getal;' zeg je tegen Perl, ik ga een Scalar container gebruiken die 'Getal' heet.

    Het eerste simpele programma:

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

    use strict;

    #Maak container leeftijd aan:
    my $Leeftijd;

    #netjes om je leeftijd vragen:
    print "Voer hier je leeftijd in >";

    #Leeftijd van de gebruiker inlezen:
    $Leeftijd=<STDIN>;

    #Antwoord ('n' betekent 'enter') :
    print "Je bent $Leeftijd jaar oud!n";

    ---

    Wanneer ik dit in een textbestandje 'leeftijd' opsla, en dit uitvoer krijg je dit:

    ChOas-Powerbook:~ choas$ ./leeftijd
    Voer hier je leeftijd in >28
    Je bent 28
    jaar oud!
    ChOas-Powerbook:~ choas$


    Hum.. ziet er bijna goed uit... wat er gebeurt is dat Perl de enter die je intikte toen je je leeftijd invoerde OOK in 'Leeftijd' stopte.

    Om een enter van een Scalar af te halen gebruiken we 'chomp'.

    Laten we het eens proberen:

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

    use strict;

    #Maak container leeftijd aan:
    my $Leeftijd;

    #netjes om je leeftijd vragen:
    print "Voer hier je leeftijd in >";

    #Leeftijd van de gebruiker inlezen:
    $Leeftijd=<STDIN>;

    #haal de enter van leeftijd af:
    chomp $Leeftijd;

    #Antwoord ('n' betekent 'enter') :
    print "Je bent $Leeftijd jaar oud!n";


    ---
    En het resultaat:

    ChOas-Powerbook:~ choas$ ./leeftijd
    Voer hier je leeftijd in >27
    Je bent 27 jaar oud!
    ChOas-Powerbook:~ choas$



    Dus... heeft dit zin gehad, of gaan we gelijk naar complexe datastructuren, OO Perl, logs en webpagina's parsen ?... of vind niemand er ene fuck aan ?

    In andere woorden: te snel/te langzaam/geen fuck aan ?
  • Tering
    The truth was in here.
    abonnement Unibet Coolblue Bitvavo
    Forum Opties
    Forumhop:
    Hop naar:
    (afkorting, bv 'KLB')