Mit første Perl-script

Posted on August 22, 2007.

Jeg har forholdsvis længe været forholdsvis betaget af Perl. Folk har fortalt mig om sproget, og brugt lovfraser som »en hybrid mellem et scripting- og programmeringssprog«, men indtil nu har jeg ikke rigtig selv været rodet ind i koden, sådan for alvor.

Det fandt jeg på en anledning til at gøre noget ved.

Jeg har længe haft et script liggende på min laptop, som umiddelbart inden mit trådløse netværkskort startes, scanner efter trådløse netværk, og konfigurerer kortet udfra en prioriteret liste af kendte - antageligt troværdige - netværk. Det virker efter hensigten i nogenlunde vid ustrækning. Mit netværk fungerer uanset om jeg booter min laptop derhjemme, på jobbet, på skolen, hos svigerforældrene og andre steder jeg frekventerer nogenlunde regelmæssigt.

Men der er en ting der bliver ved med at irritere mig. Et par af de steder jeg benytter min laptop er der flere forskellige accesspoints sat op, med hver sit ESSID, forskellige steder i bygningen. Når jeg benytter mit nuværende script associerer mit netkort med det netværk som er højest prioriteret på min liste - uanset signalstyrken. Med andre ord kan jeg starte min maskine på et skrivebord i den sydlige ende af bygningen og alligevel tvinge alle mine data gennem accesspointet i bygningens nordlige hjørne, fordi det er deroppe jeg plejer at sidde.

Derfor har jeg skrevet en erstatning i - tadaa! - Perl. Jeg har lagt scriptet her. Hvis du er Perl-kyndig vil jeg sætte ualmindelig stor pris på hvis du gider bruge 5 minutter på at kigge det igennem og give mig lidt konstruktiv kritik. Husk: det er mit første Perl-script, så jeg har garanteret taget en masse unoder med mig fra de sprog jeg sædvanligvis benytter mig af. Dem må du også gerne påpege. Jeg skal nok være en stor dreng og prøve at lade være med at få tårer i øjnene.

Scriptet fungerer - stort set som dets forgænger - ved at sammenholde en scanning efter trådløse netværk med en liste af kendte netværk. Det nye script vælger blot det af de kendte netværk med den højeste signalstyrke. Fælles for de to scripts er, at hvis ingen af de kendte netværk er til stede, falder konfigurationen tilbage på “any” og lader kortet vælge et accesspoint at associere med.

God fornøjelse, og på forhånd tak for hjælpen.

Rettelser

Onsdag 22. august 2007, 12:05.

Tusind tak til Peter Makholm for kommentarerne og de gode råd. For en god ordens skyld skal det nævnes at de fleste af de ændringer Peter foreslog, nu er implementeret i scriptet ovenfor.

Rettelse

Torsdag 23. august 2007, 9:42.

Så fandt jeg frem til et sted med flere ESSIDs så jeg kunne få testet scriptet ordentligt, og naturligvis besluttede en bug sig for at kigge frem. Det viste sig at konfigurationsfilen kun blev læst igennem en enkelt gang, idet læsepositionen ikke blev nulstillet for hver ESSID scriptet analyserede. Jeg har derfor indsat et par linjer, som fylder konfigurationsfilens linjer over i et array, som analyseringsrutinen itererer over i stedet.

Derudover ser alt ud til at fungere som ventet.