[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]![]() |
![]() |
![]() |
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]() |
![]() |
![]() |
"Martin Møller Pedersen" <sslug@sslug> writes: > Nogle perl-guruer, der kan forklare, hvorfor nedenstående program > virker, som det gør ? > Jeg fatter det ikke. Ofte vil 'perl -MO=Deparse japh.pl' være en hjælp, men fordi der er så mange eval'er giver det ikke meget hjælp her. Kender du q(foobar) som erstatning for enkeltplinger, qq(foobar) for dobbeltplinger, qw(foo bar) og selvfølgelig substitution s/// og match m//? Normalt bruger man parenteser eller parentesligende tegn til at afgrænse teksten i de første tre og skråstreger eller streglignende tegn til substitution og match, men i virkeligheden kan man bruge ethvert tegn som afgrænsning. Bruger man et bogstav som afgrænsning skal der være et mellemrum mellem operatoren (q, qq, qw, s og m) og selve strengen. Det vil sige at følgende to linjer er helt ens: print q qfoobarq; print 'foobar'; Et andet trick den anvender er (selvfølgelig) at arbejde på $_, som vi ofte kan arbejde med uden at nævne. Men først skal vi have puttet nogle data ind i $_. Det gøres ved at substituere noget ind istedet for den tomme streng: s// Dette er vores data /; eller mere obfuskeret s qq Dette er vores data q; (bemærk lige at mellemrummene i for- og bagenden kommer med i $_) Resten *tror* jeg bare er pillearbejde. Jeg tror aldrig jeg har haft fornuftig brug for at anvende bogstaver til afgrænsning sammen med nogle af disse operatore, men q() og qq() med alle mulige afgrænsningstegn er genialt når man skriver kode i flere niveauer - det vil sige kode der generere kode. -- http://peter.makholm.net/ | Vi smider blade allesammen - hele tiden sslug@sslug | som et konstant spirende efterår | Og hele tiden vokser nye frugter frem | og vi finder nogen til at plukke dem | -- Tilt, Perkussive popler
![]() |
![]() |
![]() |
||||||||||||
|
||||||||||||||
![]() | ||||||||||||||
|
||||||||||||||
![]() |
![]() |
![]() |