Noi utenti Mac sono da tempo orgogliosi del fatto che non dobbiamo digitare comandi per utilizzare al meglio le nostre macchine. Questo è ancora vero, ma ora che Mac OS X ha aperto la riga di comando di Unix, abbiamo tutti gli strumenti necessari per approfitta di alcune potenti funzionalità di programmazione e scripting, in modo che i nostri Mac possano fare più del nostro odioso lavoro. E dopotutto, non è questo il punto centrale di un computer?
La programmazione è molto simile alla cucina, una categoria di attività che abbraccia un ampio spettro, dalla complessità di Cuoco di ferro alla parodia culinaria di cuocere al microonde un hot dog. Sia la programmazione che la cucina possono essere eseguite a diversi livelli di abilità, ma anche gli chef dilettanti possono preparare cibi gustosi, proprio come i programmatori alle prime armi possono creare script utili. E come imparare a cucinare, imparare a scrivere sceneggiature all'inizio può sembrare scoraggiante.
In questa colonna, la prima di una serie che esamina le viscere più geek di OS X, imparerai come utilizzare il popolare linguaggio di scripting Perl, che è integrato in OS X. Ti mostreremo come creare uno script che converte le terminazioni di riga di un file di testo Mac in terminazioni di riga che Unix può interpretare. (Ciò consentirà l'uso di strumenti di elaborazione del testo basati su Unix sui contenuti del file.) Sebbene lo sviluppo dello script può sembrare un bel po' di sforzo, i risultati ti saranno molto utili se avrai mai bisogno di convertire più testo File. (Per ulteriori informazioni sulla specifica di più file sulla riga di comando, consulta "Prendi il comando di Mac OS X"
Come .) Ci auguriamo che questo esempio serva da assaggio appetitoso dei ricchi sapori di OS X.Come scrivere uno script Perl
Innanzitutto, devi avviare un editor di testo come TextEdit di OS X, BBEdit o, se hai già familiarità con il regno della riga di comando, uno dei tradizionali editor di testo Unix come pico o vi. Quindi salta subito dentro digitando la seguente riga:
#!/usr/bin/perl -w
Questa prima riga annuncia al sistema operativo che si tratta di uno script Perl. IL -w alla fine della riga dice a Perl che dovrebbe essere particolarmente rigoroso riguardo alla sua interpretazione dello script e mostrare avvisi se incontra del codice che considera sospetto. Prendi l'abitudine di aggiungere -w ai tuoi script: farlo ti aiuterà spesso a scoprire e risolvere i problemi di scripting prima che diventino un dolore al collo.
# caratteri di interruzione di riga: x0d – Mac, x0a – Unix
In questa linea, # indica un commento ad uso dell'autore dello script o di qualcun altro che lo legge, quindi Perl ignorerà il resto della riga. Questo commento spiega i codici per i caratteri di interruzione di riga per Mac e Unix. Successivamente, al di fuori del commento, il X la notazione dirà a Perl che stiamo usando numeri esadecimali per rappresentare le terminazioni di riga.
{
Perl usa le parentesi graffe (a volte chiamate "parentesi graffe") per raggruppare pezzi di codice. Questa serie di parentesi graffe più esterne in questo script è un indicatore visivo facoltativo di dove inizia e finisce la parte principale dello script.
foreach $inNomeFile (@ARGV) {
Lo script usa questo per ciascuno loop per elaborare tutti i nomi dei file che lo script convertirà in testo leggibile da Unix. Ogni singolo nome di file è memorizzato in un elemento separato di un array, una raccolta di variabili, chiamato @ARGV, creato da Perl.
Questa riga si traduce in "Prendi un nome file dal file @ARGV array, inseriscilo nella variabile chiamata $inNomeFileed eseguire il codice racchiuso nel set di parentesi graffe seguente; continua a farlo finché non finisci i nomi dei file in @ARGV.” In Perl, tutte le variabili iniziano con il $ carattere tranne gli array (che sono preceduti da @, Piace @ARGV ) e hash.
aperto (INTEXTFILE, $inFileName);
Questa riga dice a Perl di aprire il file, dal cui nome è stato prelevato @ARGV, e crea un riferimento ad esso, che abbiamo chiamato INTEXTFILE. Useremo questo riferimento ogni volta che dovremo leggere da questo file; Perl non saprebbe a quale file ci riferiamo se non lo chiamiamo esplicitamente.
open (OUTTEXTFILE, “>”. $inNomeFile. ".convertito");
Questa riga crea il nuovo file che conterrà il nostro testo convertito e un riferimento chiamato OUTTEXTFILE. Il resto della riga contiene il nome del file; IL > carattere è l'abbreviazione di "crea il file" e in realtà non influisce sul nome del file. La variabile $inNomeFile contiene il nome del file originale e lo script aggiungerà .convertito alla fine del suo nome (quindi l'originale non viene sovrascritto). I punti tra gli elementi del nome del file dicono a Perl di combinarli in un'unica stringa di testo.
$testoFile =;
Questa istruzione dice a Perl di leggere l'intero file di testo da INTEXTFILE e inserirlo nella variabile $testoFile. Assicurati che il file non sia troppo grande (più grande di circa 100K); anche se OS X ha una memoria virtuale in stile Unix, non puoi presumere che siano disponibili quantità esorbitanti di memoria.
Ora per il sollevamento pesante
Questa riga fa tutto il vero lavoro nella sceneggiatura ed è di conseguenza piuttosto densa:
$textFile =~ s/x0d/x0a/;
Perl ha una funzione di ricerca e sostituzione incorporata, rappresentata da S. Quando si richiama questa funzione, si specifica cosa deve cercare e sostituire con; queste due stringhe sono delimitate da / caratteri. Vogliamo sostituire i caratteri di fine riga Mac con quelli Unix, quindi quelle sono le due stringhe che abbiamo usato nei campi di ricerca e sostituzione. Usando =~ dice a Perl di eseguire la ricerca e sostituzione sui contenuti di $testoFile e poi rimetti il risultato in $testoFile.
print OUTTEXTFILE $textFile;
Una volta terminata la conversione, usa la funzione di stampa per scrivere il contenuto di $testoFile al file di output.
chiudi (INTEXTFILE);chiudi (OUTTEXTFILE);
Queste istruzioni finali chiudono i file di input e output, per mantenere le cose in ordine. Aggiungi due parentesi graffe di chiusura per terminare i tuoi pezzi di codice tra parentesi, e il gioco è fatto.
Quando hai finito, salva questo script in un file chiamato "lineconvert.pl", assicurandoti di dare a questo file terminazioni di riga Unix. Quindi utilizzare il comando chmod della riga di comando per impostare gli attributi dello script, in modo che il sistema operativo sappia che si tratta di uno script eseguibile. Per fare ciò, digita chmod 744 lineconvert.pl nella riga di comando. (Per saperne di più sul chmod comando, entra uomo chmod al prompt della riga di comando.)
Usando il tuo script Perl
Supponiamo che tu abbia un file di testo Mac chiamato "mac.txt" e desideri che i suoi contenuti abbiano terminazioni di riga Unix. Invochi il tuo script digitando ./lineconvert.pl mac.txt nella riga di comando ed esegue la conversione. Ti ritroverai con un file chiamato "mac.txt.converted", con contenuti che hanno terminazioni di riga Unix. Ta-da! Ora puoi modificare lo script per creare una versione da Unix a Mac, ad esempio.
Una delle tante funzionalità che puoi aggiungere al tuo script è una migliore gestione degli errori. Questo è particolarmente importante perché si verificano errori al di fuori del tuo controllo e non vuoi che distruggano i tuoi dati.
Avanti
Il nostro esempio introduce alcuni degli ingredienti nella grande e ben fornita cucina che è la programmazione Perl. E Perl ha innumerevoli usi oltre a modificare i file di testo: può colmare le lacune tra database e server Web per aiutarti a creare siti Web dinamici. Puoi persino usarlo per catalogare il tuo archivio MP3.
Per esplorare ulteriormente Perl, sfoglia CPAN, il Comprehensive Perl Archive Network ( www.cpan.org ). Se trovi pacchetti che sembrano utili, potresti voler mettere le mani su Imparare Perl, seconda edizione, di Randal L. Schwartz e Tom Christiansen (O'Reilly & Associates, 1997). Usandolo come libro di cucina per principianti, presto creerai script Perl che ti faranno risparmiare tempo e fatica.
Utente MacPerl di lunga data, il redattore collaboratore STEPHAN SOMOGYI non ha più paura delle espressioni regolari.
Perls of Wisdom: scrivere uno script Perl nella riga di comando di OS X può essere più semplice di quanto sembri se segui le nostre istruzioni.