Thanks Repelsteel!quote:Op vrijdag 4 juni 2004 21:36 schreef Repelsteel het volgende:
Goed initiatief ChOas! Perl verdient zeker wat meer aandacht!
Een kleine toevoeging; vergeet niet de -w parameter te verwijderen als je script eenmaal draait.
Mochten er namelijk voor de perl-compiler onlogische stukjes code voorkomen dan geeft hij hier een 'warning' op, terwijl dit eigenlijk helemaal niet onlogisch is. Dit voorkomt mega-grote logfiles.
Wat daarnaast misschien interessant is als kleine toevoeging is het webgeschikt maken van perl-scripts. Met slechts enkele toevoegingen / wijzigingen kun je je scripts online gebruiken en maakt dat perl meteen een stuk interessanter dan puur 'stand-alone-scripts'.
Dus mocht je nog ziek zijn dan hoor ik graag meer over webscripts! Of anders wil ik ook wel een stukje bijdragen aan dit topic. Beterschap!
Die is inderdaad erg cool jaquote:Op zaterdag 5 juni 2004 08:41 schreef Hiawatha het volgende:
Als voorproefje van wat er jullie te wachten staat, een DVD-decoder in 7 regels Perl:
$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%16or$t^=$c^=(
$m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^=12*($_%16
-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);if((@a=unx"C*",$_)[20]&48){$h
=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$
d=unxV,xb25,$_;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=$t&($d>>12^$d>>4^
$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^
(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
Perl de meest lelijke en krachtigste parsing taal die er bestaat
Wacht maar tot ie reguliere expressies gaat behandelen. Daar is Perl echt veel krachtiger in.quote:Op zaterdag 5 juni 2004 08:30 schreef Nebu1980 het volgende:
Het heeft inderdaad wat weg van php, zoals je schreef!
Erg handig
...nu eerst even pauze, dan weer een les?!
Yup regexps.. dat gaan wel een paar leuke lesjes wordenquote:Op zaterdag 5 juni 2004 11:17 schreef Hiawatha het volgende:
[..]
Wacht maar tot ie reguliere expressies gaat behandelen. Daar is Perl echt veel krachtiger in.
Ja mag... (doe maar klooncheck) ben niet thuisquote:Op zaterdag 5 juni 2004 14:39 schreef Slarioux het volgende:
ChOas, geef even een gil, hier of in Feedback, of ik je tutorials in een FAQ mag gooien
Klopt, dat was ikquote:Op zaterdag 5 juni 2004 17:54 schreef Cunt het volgende:
[..]
Ja mag... (doe maar klooncheck) ben niet thuis
was mijn ideequote:Op zaterdag 5 juni 2004 21:43 schreef ChOas het volgende:
[..]
Klopt, dat was ik
Oh, en ik wil toevoegen dat ik vereerd ben dat jullie hier een FAQ van willen maken
Heel goed punt!!quote:Op maandag 7 juni 2004 11:18 schreef bigben04 het volgende:
Moeten de for's in dit voorbeeld niet ook foreach's worden?
Verder, ga zo door in elk geval, ik heb zelf redelijk wat programmeerervaring maar heb nog nooit met perl gewerkt, dus ik vind dit zeker wel interessant.
Gebruikt er dan echt niemand dezequote:Op maandag 7 juni 2004 12:10 schreef rihago het volgende:
tvp
neej.. nu staat hij tenminste tussen my active topicsquote:Op maandag 7 juni 2004 12:25 schreef devzero het volgende:
offtopic
[..]
Gebruikt er dan echt niemand [afbeelding] deze
Agreequote: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:
quote:Morgen moet ik even een cursus doen, en dan 's avonds doen we references en misschien een begin van regexps...
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 doequote: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 )
Precies! ... en nu (Ja, ik ben een lul ) waarom werkt het niet wanneer je geen ( en ) om my($ptr) heen hebt in je sub ?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.
Packages ? ... ja... gaan we ook doen... komt bij het OO gedeelte...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?
Ik ga voor deze optie En 't is zeker wel leukquote: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...
Packages inderdaadquote:Op dinsdag 8 juni 2004 20:51 schreef ChOas het volgende:
[..]
Packages ? ... ja... gaan we ook doen... komt bij het OO gedeelte...
Hmm, niemandquote: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 ?
Ik weet t wel, maar da's flauw, aangezien ik al 5 jaar Perlquote:Op dinsdag 8 juni 2004 21:22 schreef devzero het volgende:
[..]
Hmm, niemand
iemand een idee als ik
my $ptr = $_[0];
schrijf
*mompelt iets over list in scalar context*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
Mensen die het echt willen weten moeten maar een boek over finite automaten aanschaffenquote: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)
en weer heb je gelijkquote: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.
Hoeveel wil je er hebben? Mail maar op bofh apendingetje meanframe punt comquote:Op woensdag 9 juni 2004 18:45 schreef ChOas het volgende:
Heeft iemand misschien een paar regels Apache logging ?
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 ?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: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
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"quote:sub alter {
my ($arg) = @_;
${$arg} = 2
};
my $test = 1;
my $ref = \$test;
print $test;
alter($ref);
print $test;
Ah. Eh. Nu ga ik inderdaad de domme cursist moeten zijn, want: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"
Komt ie...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
SPOILEROm 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]
aaaaaah... wat hier staat: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
Ah, dat snap ik inderdaad dan beter Die hele 'do what i mean' variable in perl is krachtig zat, maar leuk verwarrend bovendien.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...
Pjee!!... je stagneert helemaal niets!!.. dan heeft de rest maar wat meer geduld!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 uitleggenquote: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
SPOILEROm 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.
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.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
Volgende deel regexps ga ik je apache logging gebruikenquote: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
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 dagquote:Op woensdag 9 juni 2004 22:42 schreef ChOas het volgende:
Volgende deel regexps ga ik je apache logging gebruiken
De fout die ik krijd is.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++)
}
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.quote:syntax error at ./test line 22, near ")
}"
Execution of ./test aborted due to compilation errors.
Je doet nix in de for loop... Sterker nog, je hebt geen { en } er achter gezetquote: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.
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";
}
}
Dat het ik zelf moeten kunnen verzinnen.....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 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.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";
};
Eerst de cursus afmaken en misschien dat we een dig-mod zover krijgen dat je naam in de hall of fame komtquote:Op woensdag 9 juni 2004 22:43 schreef ChOas het volgende:
Oh, en ik vraag me af wie ik moet pijpen voor een fucking schouderklopje, maar daar kom ik nog wel achter
Inderdaad, wat CybErik zegt. Je hebt het over een element uit de list, wat een scalar is, en geen list...quote:Op donderdag 10 juni 2004 15:34 schreef Wouta het volgende:
Sorry hoor dat ik weer een vraag ga stellen....
Ik heb een vraag over het volgende voorbeeld:
[..]
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 ?
Een ander voorbeeld/quote:Op donderdag 10 juni 2004 15:34 schreef Wouta het volgende:
Ik heb een vraag over het volgende voorbeeld:
Even een hele snelle:quote:Op donderdag 10 juni 2004 21:08 schreef TimberWolf het volgende:
Even wat uitleg over de log, voor het geval begrip indeze handig is. Een apache log regel bestaat uit een vast aantal elementen, Beginnend met het 'Request IP', oftewel het IP adres van de webbrowser die de pagina opvraagt. Dan '\ \-\ \-\ ', oftewel spatie min spatie min spatie. Dan de datum, tijd en tijdzone-modifier tussen blokhaken. Als laatste de request zelf, dus de GETs en POSTs. Deze staan tussen quotes.
Overigens leuk te zien: Regel 4 is een of andere dwaas die een populair exploit voor IIS probeert uit te voeren. Dat gebeurd wel meer
Wellicht is het leuk om via een regex de IP adressen uit de logfile te toveren? IP adressen zijn altijd wel leuk voor regex uitleg volgens mij
N.B. Denk er wel aan dat dat afhankelijk is van je logformaat in je httpd.conf. Er zijn wel een aantal "standaard" logformaten (bv LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined) maar de machine waarop je je paginaatje host kan een andere methode hebben.quote:Op donderdag 10 juni 2004 21:08 schreef TimberWolf het volgende:
Even wat uitleg over de log, voor het geval begrip indeze handig is. Een apache log regel bestaat uit een vast aantal elementen,
Mits HostnameLookups Off in httpd.conf:quote:Wellicht is het leuk om via een regex de IP adressen uit de logfile te toveren? IP adressen zijn altijd wel leuk voor regex uitleg volgens mij
Perl!quote:Op donderdag 10 juni 2004 22:02 schreef devzero het volgende:
[..]
N.B. Denk er wel aan dat dat afhankelijk is van je logformaat in je httpd.conf. Er zijn wel een aantal "standaard" logformaten (bv LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined) maar de machine waarop je je paginaatje host kan een andere methode hebben.
[..]
Mits HostnameLookups Off in httpd.conf:
awk '{print $1}' /var/log/httpd-access.log | sort | uniq -c | sort -n
Moest even trollen. Maar perl is hier sneller, maar je gaat awk ook niet gebruiken om 1 string af te drukken.quote:Op donderdag 10 juni 2004 22:15 schreef ChOas het volgende:
Perl!
Overigens nog wat meer roet: vergeet niet dat je naast ipv4 nummers ook ipv6 nummers hebt. Bijvoorbeeld:quote:if (/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) {$Once{$&}++};
quote:2001:838:9999:1234:201:2ff:fe10:62ca - - [10/Jun/2004:22:24:31 +0200] "GET / HTTP/1.1" 200 213 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040421"
Dan gebruik je deze :quote:Op donderdag 10 juni 2004 22:28 schreef devzero het volgende:
[..]
Moest even trollen. Maar perl is hier sneller, maar je gaat awk ook niet gebruiken om 1 string af te drukken.
[..]
Overigens nog wat meer roet: vergeet niet dat je naast ipv4 nummers ook ipv6 nummers hebt. Bijvoorbeeld:
[..]
Ok, daar heb je gelijk mee. Ik kan me alleen wel applicaties voorstellen waar je niet het hele address maar alleen het netwerk wil hebben (wat bij ipv6 makkelijk is, ipv4 hak je maar in het wilde weg zonder netmask, bv in squid.conf "client_netmask").quote:Op donderdag 10 juni 2004 22:32 schreef ChOas het volgende:
++$Once{substr $_,0,index $_," "}
Is sowieso takke sneller omdat je geen regex machine ingaat... je gaat er alleen maar vanuit dat het eerste element voor de spatie het adres is
Op gevoel zeg ik dat er de ip-adressen in staan (dat is wat de regex matched). De constructie $once{regexresultaat}++ snap ik zeg maar bijnaquote:Op donderdag 10 juni 2004 21:41 schreef ChOas het volgende:
my %Once;
while (<INPT>)
{
if (/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) {$Once{$&}++};
};
Wat staat er nu in de hash %Once ?
Vanzelfsprekend. Maar er is natuurlijk via een regex-match wel te kijken welk logformat er gebruikt wordt. Aan het 'uiterlijk' van de data valt redelijk simpel te herkennen wat voor data het is tenslotte. Dit is overigens, voor zover ik weet, zo'n beetje de Apache default.quote:Op donderdag 10 juni 2004 22:02 schreef devzero het volgende:
N.B. Denk er wel aan dat dat afhankelijk is van je logformaat in je httpd.conf. Er zijn wel een aantal "standaard" logformaten (bv LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined) maar de machine waarop je je paginaatje host kan een andere methode hebben.
En die zijn leuker, want die bestaan niet altijd uit even veel octets Nouja, ze worden niet altijd getoond zeg maar. Dus ipv6 maakt het regex matchen wel een stuk spannenderquote:Overigens nog wat meer roet: vergeet niet dat je naast ipv4 nummers ook ipv6 nummers hebt.
Cooool!... gefeliciteerd!!!quote:Op vrijdag 11 juni 2004 08:50 schreef TimberWolf het volgende:
Hah. Net mijn eerste Perl programma gemaakt. Ik ben zo blij Stelt niet veel voor, maar werkt wel:
[ code ]
Je hebt hardgenoeg gezogen schouderklopjes :')quote:Op woensdag 9 juni 2004 22:43 schreef ChOas het volgende:
Oh, en ik vraag me af wie ik moet pijpen voor een fucking schouderklopje, maar daar kom ik nog wel achter
Jij ook al?quote:Op zaterdag 12 juni 2004 10:53 schreef Ferdy het volgende:
Zeer interessant topic!
Als ik klaar ben met me repetitieweek ga ik ook maar eens Perl proberen
Dit is de Fisher-Yates shuffle.quote:use strict;
sub fisher_yates_shuffle {
my $list = shift;
my $i = @{$list};
while ( $i-- ) {
my $j = int rand( $i );
@{$list}[$i,$j] = @{$list}[$j,$i];
}
}
En daar de functie op loslaat...quote:my @numbers = ( 0 .. 2 );
fisher_yates_shuffle(\@numbers);
woeiiiiiiquote:my $my_number = shift @numbers;
"Het getal is $my_number";
quote:sub fisher_yates_shuffle {
my $list = shift;
my $i = @{$list};
while ( $i-- ) {
my $j = int rand( $i );
@{$list}[$i,$j] = @{$list}[$j,$i];
}
}
my @numbers = ( 0 .. 2 );
fisher_yates_shuffle(\@numbers);
my $my_number = shift @numbers;
"Het getal is $my_number";
Goed gevonden! maar fisher-yates is een beetje overkill om alleen een random getal te vinden. Je gebruikt het eerder om een lijst te randomizen...quote:Op zondag 13 juni 2004 02:32 schreef CybErik het volgende:
Ik heb misschien wel een manier gevonden
[..]
Dit is de Fisher-Yates shuffle.
Als je nu een list maakt
[..]
En daar de functie op loslaat...
[..]
woeiiiiii
oftewel:
[..]
Zo ingewikkeld is het niet. Waar het in feite op neer komt is dat je de lijst afloopt en ieder element met een willekeurig gekozen ander element omwisselt. (kleine verandering op fisher-yates tov ChOas:while($i--) wordt while(--$i), het is niet interresant om element 0 met zichzelf te wisselen ).quote:Op zondag 13 juni 2004 05:07 schreef ChOas het volgende:
Iemand zin om de fisher-yates shuffle uit te leggen ?
quote:iteratie 1: i=3, j=2 en de lijst wordt a b d c
iteratie 2: i=2, j=1 en de lijst wordt a d b c
iteratie 3: i=1, j=0 en de lijst wordt d a b c
quote:iteratie 1: i=3, j=0 en de lijst wordt d b c a
iteratie 2: i=2, j=1 en de lijst wordt d c b a
iteratie 3: i=1, j=0 en de lijst wordt c d b a
wat dacht je hier van:quote:Op donderdag 24 juni 2004 17:29 schreef -DailaLama- het volgende:
Weten jullie hier wat op?
De vraag: Schrijf een functie die 4 letters als argumenten meekrijgt en alle mogelijke combinaties van deze letters afdrukt.
dus
AAAA
AAAB
AAAC
AAAD
AABA
AABB
...
ik weet wel hoe het moet, het klinkt eenvoudig, maar ik kom er niet uit
Omslachtig? Dat is nog niets ...quote:Op donderdag 24 juni 2004 19:40 schreef daReaper het volgende:
[..]
wat dacht je hier van:
sub combi {
my @letters = split(//, $_[0]);
foreach my $a (@letters) {
foreach my $b (@letters) {
foreach my $c (@letters) {
foreach my $d (@letters) {
print "$a$b$c$d\n";
}
}
}
}
}
misschien wat omslachtig, maar het werkt
use strict is datgene wat mist in php, een voorwaarde voor een serieuze taal, de constructie die mannen van jongens scheidt en/of schijdtquote:Op maandag 5 juli 2004 09:29 schreef TimberWolf het volgende:
Is 'use strict' perse noodzakelijk?
Maarquote:En als ik localtime in een array dump (my @ltime = localtime()) doet ie het ook natuurlijk.
output = "51010"quote:#!/usr/bin/perl -w
use strict;
my $a = 5;
sub functie1 {
$a = 10;
}
sub functie2 {
my $a = 20;
}
print $a;
functie1();
print $a;
functie2();
print $a;
output = "51020"quote:#!/usr/bin/perl -w
$a = 5;
sub functie1 {
$a = 10;
}
sub functie2 {
$a = 20;
}
print $a;
functie1();
print $a;
functie2();
print $a;
sleep int rand(3);quote:Op dinsdag 6 juli 2004 14:55 schreef TimberWolf het volgende:
Geeft vast nogal load op de server van de ontvangende partij
We missen hem allemaalquote:Ben ik overigens de enige die chOas mist?
Ah, lief plan. Bouwen we wel in !quote:Op dinsdag 6 juli 2004 15:35 schreef devzero het volgende:
sleep int rand(3);
oftewel wacht 0,1 of 2 seconden voor je het volgende plaatje ophaalt.
*snif*quote:We missen hem allemaal
OOquote:Op dinsdag 6 juli 2004 21:03 schreef ChOas het volgende:
escape probleem is gefixed, bovenstaande obfuscated code werkt weer
Dus... wat gaan we nu doen ?
quote:Op dinsdag 6 juli 2004 21:23 schreef daReaper het volgende:
[..]
OO
Die dingen pak ik er ook nog wel even bijquote: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 )
Hebben we het over de-refereren gehad?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 &{}.
Ja :quote:Op donderdag 15 juli 2004 08:11 schreef TimberWolf het volgende:
[..]
Hebben we het over de-refereren gehad?
Uit: Leer hier Perl (8 Juni)quote:Antwoord: de-refereren
Voor een array als volgt: @{$ArrayRef};
Voor een hash: %{$HashRef};
Ho, pardon Was niet blijven hangenquote:
Ja, we gaan het over sockets hebben ... Komt hiernaquote: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
Heb ik helaas al gedaanquote: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 ?
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
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 zaakquote: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 ?
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 werkquote: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
Die van mijn site kan ongetwijfeld beterquote: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?
Sorry, sterfgeval in de familie, ik kom over een tijdje weer actief posten...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?
Sterkte man. Ik weet hoe moeilijk het is.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...
Thanks! Dat scheelt wellicht in geheugengebruikquote:use Image::Magick qw/Crop Ping Read Write/;
als je hem met `my` definieert, is hij alleen toegankelijk vanuit het blok waarin je dat doet + zijn subblokkenquote: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.
preciesquote: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
Nou dat wist ik al Maarre leuk geschreven. Kheb er een bookmarkje van gemaakt dus zal hem thuis eens lezenquote: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...
als alle adressen bestaan uit 4x cijfer/letter, punt, 4x cijfer/letter, punt, 4x cijfer/letter, zou dit moeten werken: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?
of (wanneer je zeker bent van je input)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
Nuecken is aanzienlijk leuker dan Perlquote:Op woensdag 23 februari 2005 18:56 schreef ChOas het volgende:
Al verteld dat ik een vriendin heb ?
Kan ze ook Perl?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 ?
Tot nu toe niets.. doe eens 'which perl' op je commandline ?quote:
Teringquote: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 ?
Maar heb je er nou wat van geleerd ?quote:
Nee Gijs.. na 3 zinnen viel ik in slaapquote:Op vrijdag 21 september 2007 20:49 schreef ChOas het volgende:
[..]
Maar heb je er nou wat van geleerd ?
Wou al zeggen... jij en programmeren.. nou is perl natuurlijk geen programmeren he... of wel scriptkiddie choasquote:Op vrijdag 21 september 2007 21:00 schreef Bastard het volgende:
[..]
Nee Gijs.. na 3 zinnen viel ik in slaap
Maar leuk initiatief
*Kuch* Lisp *Kuch*quote:Op zondag 23 september 2007 14:06 schreef Farenji het volgende:
Perl
Er bestaat geen mooiere taal. Alle andere programmeertalen staan in de schaduw van Perl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | APPEAL: listen (please, please); open yourself, wide; join (you, me), connect (us,together), tell me. do something if distressed; @dawn, dance; @evening, sing; read (books,$poems,stories) until peaceful; study if able; write me if-you-please; sort your feelings, reset goals, seek (friends, family, anyone); do*not*die (like this) if sin abounds; keys (hidden), open (locks, doors), tell secrets; do not, I-beg-you, close them, yet. accept (yourself, changes), bind (grief, despair); require truth, goodness if-you-will, each moment; select (always), length(of-days) # listen (a perl poem) # Sharon Hopkins # rev. June 19, 1995 |
Dat kan ik ook.quote:Op zondag 23 september 2007 16:07 schreef Farenji het volgende:
Een taal waar je gedichten mee kan schrijven, die nog compileren ook, daar kan zelfs Lisp (Lost Inside Stupid Parentheses) niet aan tippen.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | (cond ((not (fast? code)) (must-be 'lisp)) ((out-of-memory-again?) (must-be 'lisp)) ((cant-optimise? code) (must-be 'lisp)) ((cant-change? variables) (must-be 'lisp)) ((hard-to-do? almost-everything) (must-be 'lisp)) ((no-arrays? (only lists)) (must-be 'lisp)) ((by-value-only? (even multi-megabyte-lists)) (must-be 'lisp)) ((and (equal? (sizeof integer) 1000000) (equal? (sizeof integer) (loadavg))) (must-be 'lisp)) ((because? no-I/O? (evil? side-effects))) (must-be 'lisp)) ((cant-find? missing-parenthesis) (must-be 'lisp)) (if (and (brain-dead? your-compiler) (nonexistent? '(for while do socket fork IPC etc etc etc)) (pulled-from-head? your-hair)) (lost-in-stupid-parentheses again))) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | birthday: ((I m a g i n e) (shriram@cs.rice.edu) (((Imagine there's no FORTRAN) (It's easy if you try) (No SML below us) (Above us only Y) (Imagine all the people) (Living for their Chez)) ((Imagine there's no memory leaks) (It isn't hard to do) (Nothing to malloc(3) or free(3) for) (And no (void *) too) (Imagine all the people) (Living in parentheses)) ((You may say I'm a Schemer) (But I'm not the only one) (I hope someday you'll join us) (And the world will be as (lambda (f) (lambda (x) (f x))))) ((Imagine those continuations) (I wonder if you can) (No need for C or pointers) (A brotherhood of Dan) (Imagine all the people) (GCing all the world)) ((You may say I'm a Schemer) (But I'm not the only one) (I hope someday you'll join us) (And the world will be as (lambda (f) (lambda (x) (f x))))))) 'shriram |
Inderdaad! of even <STDIN>; aan het einde van je prog zetten, quick 'n dirty manier dat je nog een keer op enter moet raggen voor je programma/dosbox sluitquote:Op donderdag 27 september 2007 12:11 schreef Farenji het volgende:
Je moet eerst een cmd venstertje openen en dan pas het script runnen; het is standaard dat een command line programmavenster wordt gesloten als het programma is afgelopen/wordt afgesloten.
K zal die wel gebruiken, werkt wat fijner/snellerquote:Op donderdag 27 september 2007 12:35 schreef ChOas het volgende:
[..]
Inderdaad! of even <STDIN>; aan het einde van je prog zetten, quick 'n dirty manier dat je nog een keer op enter moet raggen voor je programma/dosbox sluit
Leukquote:Op zondag 23 september 2007 16:07 schreef Farenji het volgende:
Een taal waar je gedichten mee kan schrijven, die nog compileren ook, daar kan zelfs Lisp (Lost Inside Stupid Parentheses) niet aan tippen.
[ code verwijderd ]
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |