[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]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] perl:JAPH



"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


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2006-11-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *