Mac OS X-hemmeligheter

Vi Mac-brukere har lenge vært stolte over at vi ikke trenger å skrive inn kommandoer for å bruke maskinene våre til det fulle. Det er fortsatt sant, men nå som Mac OS X har åpnet Unix-kommandolinjen, har vi alle nødvendige verktøy for å dra nytte av noen kraftige programmerings- og skriptfunksjoner, slik at Mac-ene våre kan gjøre mer av det grufulle arbeid. Og tross alt, er ikke det hele poenget med en datamaskin?

Programmering er mye som matlaging - en kategori av aktiviteter som spenner over et bredt spekter, fra kompleksiteten til Jernkokk til den kulinariske parodien med å steke en pølse i mikrobølgeovn. Både programmering og matlaging kan gjøres på mange forskjellige ferdighetsnivåer, men selv amatørkokker kan lage velsmakende mat, akkurat som begynnende programmerere kan lage nyttige skript. Og i likhet med å lære å lage mat, kan det til å begynne med virke skremmende å lære å skrive manus.

I denne kolonnen, den første av en serie som undersøker OS Xs nørdere innmat, lærer du hvordan du bruker det populære skriptspråket Perl, som er innebygd i OS X. Vi viser deg hvordan du bygger et skript som konverterer en Mac-tekstfils linjeavslutninger til linjeavslutninger som Unix kan tolke. (Dette vil muliggjøre bruk av Unix-baserte tekstbehandlingsverktøy på filens innhold.) Selv om man utvikler skriptet kan virke som ganske mye innsats, resultatene vil være veldig nyttige hvis du noen gang trenger å konvertere flere tekster filer. (For å lære mer om å spesifisere flere filer på kommandolinjen, se "Ta kommandoen over Mac OS X,"

Hvordan .) Vi håper at dette eksemplet vil tjene som en appetittvekkende smak av OS Xs rike smaker.

Hvordan skrive et Perl-skript

Først må du starte et tekstredigeringsprogram som OS Xs TextEdit, BBEdit, eller hvis du allerede er kjent med kommandolinjeområdet, en av de tradisjonelle Unix-tekstredigererne som pico eller vi. Hopp deretter rett inn ved å skrive følgende linje:

#!/usr/bin/perl -w

Denne første linjen kunngjør til operativsystemet at det har å gjøre med et Perl-skript. De -w på slutten av linjen forteller Perl at den bør være spesielt streng når det gjelder tolkningen av skriptet og vise advarsler hvis den møter kode som den anser som mistenkelig. Få deg for vane å legge til -w til skriptene dine: å gjøre det vil ofte hjelpe deg med å oppdage og fikse skriptproblemer før de blir vonde i nakken.

# linjeskifttegn: x0d – Mac, x0a – Unix

I denne linjen, # indikerer en kommentar for bruk av forfatteren av manuset eller noen andre som leser den, så Perl vil ignorere resten av linjen. Denne kommentaren forklarer kodene for Mac- og Unix-linjeskifttegnene. Senere, utenfor kommentaren, ble x notasjon vil fortelle Perl at vi bruker heksadesimale tall for å representere linjeavslutninger.

{

Perl bruker klammeparenteser (noen ganger kalt "krøllete parenteser") for å gruppere kodebiter. Dette ytterste settet med bukseseler i dette manuset er en valgfri visuell indikator på hvor manusets hoveddel begynner og slutter.

foreach $inFileName (@ARGV) {

Skriptet bruker dette for hver loop for å jobbe gjennom alle navnene på filene som skriptet vil konvertere til Unix-lesbar tekst. Hvert enkelt filnavn er lagret i et separat element i en matrise – en samling av variabler – kalt @ARGV, som Perl lager.

Denne linjen oversettes til "Ta et filnavn fra @ARGV array, legg den inn i variabelen kalt $inFileName, og kjør koden som er vedlagt i følgende sett med klammeparenteser; fortsett å gjøre dette til du går tom for filnavn i @ARGV." I Perl begynner alle variabler med $ tegn unntatt arrays (som er innledet med @, som @ARGV ) og hashes.

åpen (INTEXTFILE, $inFileName);

Denne linjen forteller Perl å åpne filen, hvis navn den har plukket fra @ARGV, og opprett en referanse til den, som vi har navngitt INTEXTFIL. Vi vil bruke denne referansen når som helst vi må lese fra denne filen; Perl ville ikke vite hvilken fil vi refererte til hvis vi ikke navnga den eksplisitt.

åpen (OUTTEXTFILE, ">". $inFileName. ".konvertert");

Denne linjen oppretter den nye filen som vil inneholde vår konverterte tekst, og en referanse kalt UTTEKSTFIL. Resten av linjen inneholder filens navn; de > tegnet er en forkortelse for "opprett filen" og påvirker faktisk ikke filens navn. Variabelen $inFileName inneholder navnet på den opprinnelige filen, og skriptet vil legges til .konvertert til slutten av navnet (slik at originalen ikke blir overskrevet). Periodene mellom elementene i filnavnet forteller Perl å kombinere dem til en enkelt tekststreng.

$tekstfil =;

Denne uttalelsen forteller Perl å lese hele tekstfilen fra INTEXTFIL og legg den inn i variabelen $textFile. Pass på at filen ikke er for stor (større enn ca. 100K); selv om OS X har virtuelt minne i Unix-stil, kan du ikke anta at ublu minne er tilgjengelig.

Nå for tunge løft

Denne linjen gjør alt det virkelige arbeidet i manuset og er følgelig ganske tett:

$textFile =~ s/x0d/x0a/;

Perl har en innebygd søk-og-erstatt-funksjon, representert ved s. Når du aktiverer denne funksjonen, spesifiserer du hva den skal søke etter og erstatte med; disse to strengene er avgrenset av / tegn. Vi ønsker å erstatte Mac-linjeavslutningstegn med Unix-tegnene, så det er de to strengene vi har brukt i søke- og erstatningsfeltene. Ved hjelp av =~ ber Perl utføre søket og erstatte innholdet i $textFile og sett deretter resultatet tilbake i $textFile.

print OUTTEXTFILE $textFile;

Når konverteringen er ferdig, bruk utskriftsfunksjonen til å skrive innholdet i $textFile til utdatafilen din.

lukk (INTEXTFILE);lukk (UTTEKSTFIL);

Disse endelige uttalelsene lukker inn- og utdatafilene for å holde det ryddig. Legg til to avsluttende klammeparenteser for å avslutte kodebitene dine, og det er det.

Når du er ferdig, lagre dette skriptet i en fil som heter "lineconvert.pl" - sørg for å gi denne filen Unix-linjeavslutninger. Bruk deretter kommandolinjens chmod-kommando for å angi skriptets attributter, slik at operativsystemet vet at det er et kjørbart skript. For å gjøre dette, skriv chmod 744 lineconvert.pl inn i kommandolinjen. (For å lære mer om chmod kommando, skriv inn mann chmod ved ledeteksten.)

Bruke Perl-skriptet ditt

La oss si at du har en Mac-tekstfil kalt "mac.txt" og at du vil at innholdet skal ha Unix-linjeavslutninger. Du påkaller skriptet ditt ved å skrive ./lineconvert.pl mac.txt på kommandolinjen, og den utfører konverteringen. Du ender opp med en fil som heter "mac.txt.converted," med innhold som har Unix-linjeavslutninger. Ta-da! Nå kan du endre skriptet for å lage en Unix-til-Mac-versjon, for eksempel.

En av de mange funksjonene du kan legge til i skriptet ditt er forbedret feilhåndtering. Dette er spesielt viktig fordi det oppstår feil utenfor din kontroll, og du vil ikke at de skal ødelegge dataene dine.

Videre

Vårt eksempel introduserer noen av ingrediensene i det store og velfylte kjøkkenet som er Perl-programmering. Og Perl har utallige bruksområder utover å endre tekstfiler: den kan fylle hullene mellom databaser og webservere for å hjelpe deg med å lage dynamiske nettsider. Du kan til og med bruke den til å katalogisere MP3-arkivet ditt.

For å utforske Perl videre, bla gjennom CPAN, Comprehensive Perl Archive Network ( www.cpan.org ). Hvis du finner pakker som virker nyttige, kan det være lurt å få tak i dem Lære Perl, andre utgave, av Randal L. Schwartz og Tom Christiansen (O’Reilly & Associates, 1997). Ved å bruke den som nybegynnerkokeboken din, vil du snart lage Perl-manus som sparer deg for tid og slit.

En mangeårig MacPerl-bruker, bidragsredaktør STEPHAN SOMOGYI er ikke lenger redd for regulære uttrykk.

Perls of Wisdom: Å skrive et Perl-skript i OS Xs kommandolinje kan være enklere enn det ser ut hvis du følger instruksjonene våre.
  • Jul 25, 2023
  • 29
  • 0