Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
Se kommentarer (3)
Emner

Nu har han to problemer...

Af Peter Makholm 29. november 2007 kl. 09:25

En af mine venner havde et let problem. I en række filer skulle han fjerne et bestemt afsnit. Hvert afsnit bestod af en linje der startede i begyndelsen af en linje og derefter en række indrykkede linjer. Det lyder jo let, men han var altså ikke gode venner med regulære udtryk, men man måtte kunne gøre det smart.

Det tog mig et par minutter at sætte følgende kodestump sammen:

local $/ = undef; my $file = <>;

$file =~ s/^\w+\s+FooBar.*'('=^\w)//ms

print $file;

De to første linjer er idiomet for at læse en hel fil ind i $file. Det sjove sker i linje tre. Det begynder let nok, så kommer der en ikke-grådig stjerne og vi slutter af med en "zero width look ahead". Nåja og så lige noget mystisk '/ms' tilsidst.

Alternativt rystede jeg følgende ud ad ærmet:

while(<>) { $doprint = 1 if /^\w/; $doprint = 0 if /^\w+\s+FooBar/;

print $_ if $doprint;

}

Hver gang vi ser starten af et afsnit slår vi udskrivning til, men hvis vi ser starten på det afsnit vi vil fjerne slår vi udskrivning fra. Stort set samme mængde kode, men ingen specielle ting ud over helt standard perl-idiomer. Det burde der ikke være de store problemer i at vedligeholde om 14 dage.

Men regulære udtryk er smart! Ja, men ud over at være lettere at vedligeholde, viser en løs benchmark at løsningen med løkken er 3 gange så hurtig hvis jeg isolerer løkken, og 20% hurtigere hvis jeg medtager filhåndtering. (Nej, koden gør ikke helt det samme...)

Men regulære udtryk er smart! Ja, men kun hvis man rent faktisk kan gennemskue hvad de gør uden at gribe til dokumentationen.

Men regulære udtryk er smart! Ja, så lav så mange som overhovedet muligt. Heller to små end et stort.

I 1997 skrev Jamie Zawinski (tidlig Netscape-udvikler) en lang Perl-rant hvor følgende citat stammer fra: 'Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.'

Talemåden er langt ældre og kan bruges om mange ting, for eksempel Tråde, XML og singleton objekter. Altsammen gode værktøjer, men bør ikke bruges ukritisk.

Send Tweet
Udskriv
Billede af Peter MakholmOm Peter MakholmFollow @pmakholm

Kommentarer (3)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Peter Favrholdt 29. nov. 2007 - 23.07
 
Dejligt

Dejligt med noget seriøs kode, og også et fint eksempel!

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Morten Juhl-Johansen Zölde-Fejér 30. nov. 2007 - 10.28
 
XKCD

http://xkcd.org/208/

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Peter Makholms billede
Peter Makholm 30. nov. 2007 - 11.52
 
Re: Dejligt

Jeg vil meget gerne skrive flere indlæg af denne stil, men jeg har opdaget at det faktisk er svært.

Kodeeksemplerne må ikke blive meget større end her, hverken i kompleksitet eller i breden. Man skal afveje hvor mange specielle perl-konstruktioner man kan tillade sig at bruge. At slurpe en fil kræver en forklaring, at bruge if som statement modifier går nok, men jeg har sikkert skræmt folk med Perl-fobi væk. Hvor meget skal man forklare? Jeg kunne sagtens have pillet det regulære udtryk fra hinanden, så alle kunne forstå det (i et par sekunder).

Og derudover skal man have noget relevant at sige. Jeg vil nødigt ende med noget der "bare" er rodede fragmenter af en lærebog.

Må også lave flere xkcd-referencer...

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Kinect til Windows klar på dansk til juni

Udgivet 24. maj 9.24Opdateret 24. maj 9.24

GOTO Copenhagen dag 3 i billeder: Sådan kaprer udstillerne kunder i biksen

Udgivet 24. maj 8.49Opdateret 24. maj 8.49

Jysk hospital bygger eget socialt netværk på Drupal

Udgivet 24. maj 8.07Opdateret 24. maj 8.07

Kynisk it-guru: »Internettet er basalt set noget lort«

Udgivet 24. maj 6.59Opdateret 24. maj 6.59

Meego-afløseren Tizen klar til at tage kampen op med Android

Udgivet 23. maj 16.01Opdateret 23. maj 16.01

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Seneste debat

  1. Sådan formaterer du tekst i debatten på Version2

    31 comments.
    Last update 0 sek.
    Skrevet af Casper Thomsen
  2. Dart: Dynamisk Statisk Programmering

    22 comments.
    Last update 2 minutter 15 sekunder
    Skrevet af Casper Bang
  3. Kynisk it-guru: »Internettet er basalt set noget lort«

    1 comment.
    Last update 11 minutter 35 sekunder
    Skrevet af Jørgen Abelsen
  4. Meego-afløseren Tizen klar til at tage kampen op med Android

    5 comments.
    Last update 13 minutter 11 sekunder
    Skrevet af Lars Arnbak
  5. Oracle tabte, vandt Google Java ?

    1 comment.
    Last update 16 minutter 18 sekunder
    Skrevet af Peter Jensen
  6. HTML5 – det nye sort?

    13 comments.
    Last update 21 minutter 38 sekunder
    Skrevet af Andreas Larsen
  7. To psykologiske årsager til at IT-projekter går galt

    16 comments.
    Last update 38 minutter 28 sekunder
    Skrevet af Carsten Sonne Larsen
  8. Verdens mest brugte browser hedder Chrome

    10 comments.
    Last update 49 minutter 55 sekunder
    Skrevet af Mikkel Kristensen

Mere debat »

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Download Windows 8
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Mountain Lion
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu 11.10
  • Virtualisering
  • Windows 8
  • Windows Phone 7
  • iOS 5
  • iPhone 4S

Tjenester

  • Android-app
  • iPhone-app
  • RSS-feeds
Følg @version2dk
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Skelbækgade 4 1717 København V
  • Tlf. work 33265300