Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Emner
  • Opret bruger
  • Log ind
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 Makholm

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

Konklusion af Polsag-review fra 2009: Elendig kode hånd i hånd med elendig kontrakt

Udgivet 10. feb 6.59Opdateret 10. feb 6.59

It skal spare kommunerne for 165 millioner kroner i 2012

Udgivet 9. feb 16.02Opdateret 9. feb 16.02

Adobe: Vi laver ikke Flash til Android-udgaven af Chrome

Udgivet 9. feb 15.15Opdateret 9. feb 15.15

Så oldnordisk er politiets it-miljø: Nostalgisk gensyn med 1980’erne

Udgivet 9. feb 14.22Opdateret 9. feb 15.12

EMC lægger flash-cache på PCIe-kort: 4.000 gange hurtigere end harddiske

Udgivet 9. feb 13.39Opdateret 9. feb 13.39
Flere it-nyheder »
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Seneste debat

  1. Domæne-forening: Lov om .aarhus og .cph var for tynd

    10 comments.
    Last update 21 minutter 4 sekunder
    Skrevet af Nikolaj Brinch Jørgensen
  2. Opdateret liste over danske iværksættere

    2 comments.
    Last update 3 timer 45 minutter
    Skrevet af Therese Hansen
  3. Stop SOPA, PIPA, ACTA, TPP og alle dem der kommer efter

    50 comments.
    Last update 8 timer 6 minutter
    Skrevet af Bjarne W. B. Petersen
  4. Derfor bliver dårlige it-projekter ikke stoppet i tide

    1 comment.
    Last update 8 timer 30 minutter
    Skrevet af Kasper Jørgensen
  5. Grotesk jobinterview i 2007: »Tag ikke jobbet, vi får alligevel aldrig Polsag til at virke«

    17 comments.
    Last update 8 timer 38 minutter
    Skrevet af Claus Waldersdorff Knudsen
  6. Så oldnordisk er politiets it-miljø: Nostalgisk gensyn med 1980’erne

    6 comments.
    Last update 8 timer 40 minutter
    Skrevet af Simon Justesen
  7. ACTA er i orden!

    51 comments.
    Last update 12 timer 3 minutter
    Skrevet af Jarle Knudsen
  8. It-advokat: Nu går grænsebommene ned over internettet

    10 comments.
    Last update 13 timer 50 minutter
    Skrevet af Niels Elgaard Larsen
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
  • Digitaliseringsstyrelsen
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X 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
Få it-nyheder og blogs hver dag med Version2's nyhedsbrev.

Version2 udgives af

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