[successivo] [precedente] [inizio] [fine] [indice generale] [indice analitico]
Nelle sezioni seguenti viene descritto brevemente il funzionamento di alcune funzioni interne di Perl. La sintassi viene mostrata secondo lo stile della documentazione di Perl, per cui, blocco rappresenta un gruppo di istruzioni nella forma consueta di Perl, e lista rappresenta un elenco di espressioni separate da virgole.
blocco equivale a:
{ istruzione ... }
lista equivale a:
espressione1 , espressione2 , ...
Le funzioni descritte sono raggruppate in base al tipo di situazione in cui vengono utilizzate normalmente.
Nelle sezioni seguenti vengono elencate alcune funzioni che riguardano la gestione dei file, nel senso globale, esterno. Le funzioni per la gestione del contenuto dei file vengono descritte più avanti.
Tabella 7.1. Elenco di alcune funzioni riferite alle operazioni sui file.
Perl permette di effettuare una serie di test sui file in modo analogo a quanto si fa con le shell tradizionali. La sintassi è esprimibile nei due modi seguenti.
- x nome_file
- x flusso
Nel primo caso si fa riferimento a un file indicato per nome, nel secondo il riferimento è a un flusso di file. La lettera x cambia a seconda del tipo di test da verificare. La tabella 7.2 mostra l'elenco di questi test.
Tabella 7.2. Elenco dei test - x .
I vari test restituiscono il valore uno se si verificano, oppure la stringa nulla in caso contrario. A questo ci sono delle eccezioni che sono indicate nella tabella.
if (-x "esempio.pl") { print "Il file è eseguibile\n"; }
Restituisce il messaggio se il file esempio.pl
è eseguibile.
chmod permessi , file , ...
chmod() cambia i permessi dei file indicati come argomento. In particolare, l'argomento è una lista, in cui il primo elemento è costituito dai permessi espressi in forma numerica ottale. Dal momento che si tratta di un numero ottale, è bene che non sia fornito in forma di stringa perché la conversione da stringa a numero ottale non è automatica. Restituisce il numero di file su cui ha potuto intervenire con successo.
chmod 0755, 'mio_file', 'tuo_file', 'suo_file';
Cambia i permessi ai file indicati dopo la modalità.
@elenco = ('mio_file', 'tuo_file', 'suo_file'); chmod 0755, @elenco;
Esattamente come nell'esempio precedente.
@elenco = ('mio_file', 'tuo_file', 'suo_file'); chmod (0755, @elenco);
Esattamente come nell'esempio precedente, ma più simile alle chiamate di funzione degli altri linguaggi.
chown uid , gid , file , ...
chown() cambia i permessi dei file indicati nella lista di argomenti. I primi due elementi della lista sono rispettivamente il numero UID e GID. Gli elementi restanti sono i file su cui si vuole intervenire. Restituisce il numero di file su cui ha potuto intervenire con successo.
chown 1001, 100, 'mio_file', 'tuo_file', 'suo_file';
Cambia l'utente e il gruppo proprietari dei file mio_file
, tuo_file
e suo_file
.
chown (1001, 100, 'mio_file', 'tuo_file', 'suo_file');
Esattamente come nell'esempio precedente.
link file_di_origine , collegamento_di_destinazione
link() genera un collegamento fisico a partire da un file esistente. Restituisce Vero se la creazione ha successo.
lstat file
lstat flusso
lstat() funziona esattamente come stat(), con la differenza che restituisce le informazioni relative a un collegamento simbolico, invece di quelle del file a cui questo punta. Se non viene indicato l'argomento, lstat() utilizza il contenuto della variabile predefinite $_.
readlink file
readlink() restituisce il valore di un collegamento simbolico. Se non viene indicato l'argomento, readlink() utilizza il contenuto della variabile predefinita $_.
$prova = readlink '/bin/sh';
Assegna alla variabile $prova il percorso contenuto nel collegamento simbolico /bin/sh
. Probabilmente, alla fine, la variabile conterrà la stringa bash.
rename nome_vecchio , nome_nuovo
rename() cambia il nome di un file, o lo sposta. Tuttavia, lo spostamento non può avvenire al di fuori del file system di partenza. Restituisce uno se l'operazione riesce, altrimenti zero.
stat file
stat flusso
stat() restituisce un array di tredici elementi contenenti tutte le informazioni sul file indicato per nome o attraverso un flusso di file. Se non viene indicato l'argomento, stat() utilizza il contenuto della variabile predefinita $_.
Gli elementi dell'array restituito sono riportati nella tabella 7.3 in cui appare anche il nome suggerito per la trasformazione in variabili scalari.
Tabella 7.3. Elenco degli elementi componenti l'array restituito da stat().
Va osservato che le informazioni data-orario sui file sono espresse in forma numerica che esprime il tempo trascorso a partire dalla data di riferimento del sistema operativo. Nel caso dei sistemi derivati da Unix si tratta dell'ora zero del 1/1/1970. Nello stesso modo, è evidente che tutte queste informazioni possono essere ottenute solo da un file system che può gestirle.
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat ('/home/tizio/mio_file');
Preleva tutte le informazioni sul file /home/tizio/mio_file
e le scompone in diverse variabili scalari.
symlink file_di_origine , collegamento_di_destinazione
symlink() genera un collegamento simbolico a partire da un file esistente. Restituisce Vero se la creazione ha successo.
unlink lista_di_file
unlink() cancella i file indicati per nome tra gli argomenti. Generalmente non possono essere cancellate le directory (e comunque sarebbe inopportuno dato il tipo di cancellazione che si fa). Restituisce il numero di file cancellati con successo. Se non viene indicato l'argomento, unlink() utilizza il contenuto della variabile predefinita $_.
utime data_di_accesso , data_di_modifica , lista_di_file
utime() cambia la data di modifica e di accesso di una serie di file. Le date, indicate come argomenti iniziali, sono espresse nella forma numerica gestita dal sistema operativo. La data di modifica dell'inode viene cambiata automaticamente in modo che corrisponda al momento in cui questa modifica viene effettuata.
$momento = time; utime $momento, $momento, 'mio_file';
Cambia la data di accesso e modifica in modo da farle coincidere con quella riportata dall'orologio dell'elaboratore nel momento in cui si eseguono queste istruzioni.
Nelle sezioni seguenti vengono elencate alcune funzioni che riguardano la gestione delle directory e di raggruppamenti di file. Vengono ignorate volutamente le funzioni specifiche di Perl per la lettura delle directory.
Nome | Descrizione. |
chdir() | Cambia la directory di lavoro. |
glob() | Espande un modello fatto attraverso l'uso di caratteri jolly. |
mkdir() | Crea una directory. |
rmdir() | Cancella una directory vuota. |
Tabella 7.4. Elenco di alcune funzioni riferite alle operazioni sulle directory.
chdir directory
chdir() cambia la directory di lavoro posizionandosi in corrispondenza di quanto indicato come argomento. Se l'argomento viene omesso, lo spostamento avviene nella directory personale, attraverso quanto determinato dal contenuto di $ENV{"HOME"}. Restituisce Vero se l'operazione ha successo, Falso in tutti gli altri casi.
glob espressione
glob() restituisce quanto indicato nell'argomento dopo un'operazione di espansione, come farebbe una shell. Se l'argomento non viene indicato, l'espansione viene effettuata sul contenuto della variabile $_.
$primo = glob ("/bin/*");
Assegna alla variabile $primo il percorso assoluto del primo file che viene trovato attraverso l'espansione del modello /bin/*
.
@elenco = glob ("/bin/*");
Assegna all'array @elenco i percorsi assoluti dei file che vengono trovati attraverso l'espansione del modello /bin/*
.
mkdir directory , permessi
mkdir() crea la directory indicata come primo argomento. I permessi della directory sono indicati come secondo argomento, devono essere espressi con un numero ottale e risulteranno filtrati ulteriormente dalla maschera dei permessi. Restituisce uno se l'operazione riesce, altrimenti zero, impostando anche la variabile $!.
In generale, non dovrebbe essere possibile assegnare dei permessi negli S-bit. In pratica dovrebbe essere consentito di operare solo con i soliti permessi di lettura, scrittura ed esecuzione (attraversamento). |
mkdir ("/tmp/prova");
Crea la directory /tmp/prova/
con i permessi normali dell'utente.(1)
mkdir ("/tmp/prova", 0755);
Crea la directory /tmp/prova/
con i permessi 07558 (si osservi che si tratta di un numero ottale), che vengono comunque filtrati dalla maschera dei permessi.
rmdir directory
rmdir() elimina la directory indicata come argomento. Se l'argomento non viene fornito, si utilizza la variabile predefinita $_. Restituisce uno se l'operazione riesce, altrimenti zero, impostando anche la variabile $!.
Nelle sezioni seguenti vengono elencate alcune funzioni che riguardano la gestione dei dati contenuti nei file.
Tabella 7.5. Elenco di alcune funzioni riferite alle operazioni di I/O.
binmode flusso
binmode() attiva la modalità binaria per il file corrispondente al flusso di file indicato come argomento. Generalmente, non è necessario utilizzare questa istruzione con GNU/Linux, mentre potrebbe essere necessario in altri ambienti. Si può dire che questa istruzione serva solo quando il sistema operativo sottostante utilizza un codice di interruzione di riga diverso dal semplice <LF>.
chomp espressione_stringa
chomp lista
chomp() riceve come argomento un'espressione che restituisce una stringa o una lista di stringhe. Il suo scopo è eliminare dalla parte finale il codice di interruzione di riga, che coincide normalmente con il carattere <LF>. Precisamente si tratta di quanto contenuto nella variabile predefinita $/. Se non viene indicato l'argomento, interviene sul contenuto della variabile $_. Restituisce il numero di caratteri eliminati.
#!/usr/bin/perl $/ = "\r\n"; while ($riga = <STDIN>) { chomp ($riga); print STDOUT ("$riga\n"); }
Quello che si vede è un esempio molto semplice di un filtro che trasforma un file di testo in stile Dos a uno in stile Unix. In pratica, viene definito che l'interruzione di riga è indicata attraverso la sequenza dei caratteri <CR><LF> (\r\n), e quindi, attraverso la funzione chomp() viene eliminata dalle righe lette. Infine, le righe vengono emesse attraverso lo standard output, con l'aggiunta del codice <LF> finale.
chop espressione_stringa
chop lista
chop() riceve come argomento un'espressione che restituisce una stringa o una lista di stringhe. Il suo scopo è eliminare l'ultimo carattere della stringa, o delle stringhe della lista. In questo senso differisce da chomp() che invece elimina la parte finale solo se necessario. Restituisce l'ultimo carattere eliminato.
close flusso
close() chiude un flusso di file aperto precedentemente. Restituisce Vero se l'operazione ha successo e non si sono prodotti errori di alcun tipo. È opportuno osservare che non è necessario chiudere un file se poi si deve riaprire immediatamente con la funzione open(): lo si può semplicemente riaprire.
eof flusso
eof() verifica se la prossima lettura del flusso di file supera la fine del file. Restituisce uno se ciò si verifica. Questa funzione è generalmente di scarsa utilità dal momento che la lettura di una riga oltre la fine del file genera un risultato indefinito che può essere verificato tranquillamente in un'espressione condizionale. Oltre a ciò, eof() si verifica prima che il tentativo di lettura sia stato fatto veramente, contrariamente a quanto avviene di solito in altri linguaggi di programmazione.
fcntl flusso , funzione , scalare
fcntl() esegue la chiamata di sistema omonima, e per questo può essere utilizzata solo con un sistema operativo che la gestisce. Prima di poter utilizzare questa funzione occorre richiamare una serie di valori corrispondenti a macro del proprio sistema:
use Fcntl;
fileno flusso
fileno() restituisce il descrittore corrispondente a un flusso di file.
flock flusso , operazione
flock() esegue la chiamata di sistema omonima, oppure una sua emulazione, per il file identificato tramite il flusso di file. flock() permette di eseguire il blocco di un file nel suo complesso e non record per record. Restituisce Vero se l'operazione ha successo.
L'operazione, cioè il tipo di blocco, viene indicata attraverso una sorta di macro che viene inserita nel sorgente di Perl attraverso la dichiarazione seguente:
use Fcntl ':flock';
LOCK_SH
Corrisponde normalmente al valore numerico uno. Richiede un blocco condiviso (shared).
LOCK_EX
Corrisponde normalmente al valore numerico due. Richiede un blocco esclusivo.
LOCK_UN
Corrisponde normalmente al valore numerico otto. Rilascia il blocco.
LOCK_NB
Corrisponde normalmente al valore numerico quattro. Viene sommato a LOCK_SH o a LOCK_EX in modo da non attendere lo sblocco del file nel caso che questo risulti già bloccato.
use Fcntl ':flock'; # importa le costanti LOCK_... ... open (ELENCO, ">> /home/tizio/mioelenco"); flock (ELENCO, LOCK_EX); seek (ELENCO, 0, 2); print ELENCO $daelencare,"\n"; flock (ELENCO, LOCK_UN);
Vengono eseguite le operazioni seguenti:
si caricano le costanti di definizione dei tipi di blocco attraverso l'istruzione use Fcntl ':flock';;
si apre il file /home/tizio/mioelenco
in aggiunta;
si blocca il file in modo esclusivo;
per sicurezza si posiziona il puntatore del file alla fine dello stesso;
si inserisce una riga nel file;
si rilascia il blocco.
use Fcntl ':flock'; # importa le costanti LOCK_... ... open (ELENCO, ">> /home/tizio/mioelenco"); if (flock (ELENCO, (LOCK_EX)+(LOCK_NB))) { seek (ELENCO, 0, 2); print ELENCO $daelencare,"\n"; flock (ELENCO, LOCK_UN); } else { print STDOUT "Il file è impegnato.\n"; }
Si tratta di una variante dell'esempio precedente in cui si richiede un blocco esclusivo senza attesa. Se il blocco ha successo, si procede, altrimenti viene segnalata la presenza del blocco eseguito da un altro processo (si osservi il fatto che le macro sono state racchiuse tra parentesi tonde prima di sommarle assieme).
getc flusso
getc() legge il file indicato dal flusso di file, o dallo standard input se viene omesso l'argomento, e restituisce il prossimo carattere. Se si supera la fine del file restituisce la stringa nulla.
ioctl flusso , funzione , scalare
ioctl() esegue la chiamata di sistema omonima, e per questo può essere utilizzata solo con un sistema operativo che la gestisce. Per poterla utilizzare occorre consultare la documentazione interna di Perl.
open flusso , file
open() apre il file indicato come secondo argomento utilizzando il flusso di file indicato come primo argomento. Il nome del file è composto normalmente da un prefisso simbolico che ne rappresenta la modalità di utilizzo:
<
questo simbolo o l'assenza di ogni altro prefisso rappresenta l'apertura del file in lettura, o in input;
>
il file viene troncato (viene ridotto a un file vuoto) e aperto in scrittura, o in output;
>>
il file viene aperto in scrittura in aggiunta;
+<
il file viene aperto in lettura e scrittura, senza il troncamento iniziale;
+>
il file viene aperto in scrittura e lettura, a cominciare dal troncamento iniziale;
|
il file viene interpretato come un comando a cui inviare i dati in scrittura attraverso una pipeline. Eccezionalmente, questo simbolo può apparire anche, o soltanto, alla fine di un comando del quale si vuole leggere lo standard output.
Il prefisso può essere staccato dal nome del file attraverso spazi. L'apertura del file rappresentato da un trattino (-) è equivalente all'apertura dello standard input, mentre l'apertura del file >- è equivalente all'apertura dello standard output.
Restituisce Vero se l'apertura ha successo.
if (open (ORDINI, ">> /var/log/ordini")) { if (flock (ORDINI, LOCK_EX)) { seek (ORDINI, 0, 2); print ORDINI ("$ordine\n"); } close (ORDINI); }
Tenta di aprire il file /var/log/ordini
in aggiunta, quindi tenta di bloccarlo in modo esclusivo. Se ci riesce sposta il puntatore alla fine del file, per sicurezza, quindi inserisce un nuovo ordine. Infine chiude il file.
if (open (MAN, "man $DATI{sezione} $DATI{man} | col -bx |")) { print "Content-type: text/html\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>man $DATI{sezione} $DATI{man}</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H1>man $DATI{sezione} $DATI{man}</H1>\n"; print "<PRE>\n"; while ($risposta = <MAN>) { print $risposta; } print "</PRE>\n"; print "</BODY>\n"; print "</HTML>\n"; }
pipe flusso_in_lettura , flusso_in_scrittura
pipe() esegue la chiamata di sistema omonima, aprendo due flussi di file, uno in lettura e l'altro in scrittura. Per poterla utilizzare occorre consultare la documentazione interna di Perl.
print flusso lista
print lista
print() emette attraverso il flusso di file indicato la lista di argomenti successiva. Se non viene specificato un flusso di file, tutto viene emesso attraverso lo standard output, oppure attraverso quanto specificato con la funzione select(). Se non viene specificato alcun argomento, viene emesso il contenuto della variabile $_.
È il caso di osservare che l'argomento che specifica il flusso è separato dalla lista di stringhe da emettere solo attraverso uno o più spazi, e non da una virgola. Per lo stesso motivo, se il flusso di file è contenuto in un elemento di un array, oppure è il risultato di un'espressione, ciò deve essere indicato in un blocco.
Restituisce Vero se l'operazione di scrittura ha successo.
print "Ciao, come stai?\n";
Emette attraverso lo standard output il messaggio indicato come argomento.
print STDERR "Errore $errore\n";
Emette attraverso lo standard error il messaggio indicato come argomento.
print { $elenco_file[$i] } "Bla bla bla\n";
Inserisce il messaggio nel flusso di file indicato da $elenco_file[$i].
print { $ok ? STDOUT : STDERR } ("Bla bla bla\n");
Emette il messaggio attraverso lo standard output, oppure lo standard error, a seconda del valore contenuto in $ok.
printf flusso formato , lista
printf formato , lista
È equivalente all'uso di sprintf() nel modo seguente:
print flusso sprintf formato , lista
read flusso , scalare , lunghezza , scostamento
read flusso , scalare , lunghezza
read() tenta di leggere il flusso di file specificato e di ottenere la quantità di byte espressa nel terzo argomento, inserendo quanto letto nella variabile scalare indicata come secondo. Se viene indicato anche il quarto argomento, lo scostamento, il contenuto della variabile non viene rimpiazzato completamente, ma è sovrascritto a partire dalla posizione indicata dallo scostamento stesso. La funzione restituisce il numero di byte letti effettivamente, oppure il valore indefinito se si è verificato un errore.
seek flusso , posizione , partenza
seek() modifica la posizione del puntatore riferito al flusso di file. La posizione effettiva nel file dipende dal valore del secondo e del terzo argomento. Precisamente, il terzo argomento può essere zero, uno o due, in base al significato seguente:
0 -- la nuova posizione corrisponde esattamente a quanto indicato dal secondo argomento;
1 -- la nuova posizione corrisponde alla posizione corrente più quanto indicato nel secondo argomento;
2 -- la nuova posizione corrisponde alla posizione successiva alla fine del file più il valore del secondo argomento (solitamente negativo).
seek (MIO_FILE, 0, 2);
Posiziona alla fine del file in modo da poter aggiungere successivamente qualcosa a questo.
seek (MIO_FILE, 0, 0);
Posiziona all'inizio del file.
select flusso
select() permette di definire il flusso di file in scrittura predefinito, per tutte quelle situazioni in cui questo concetto ha significato.
select (MIO_FILE); ... print ("ciao a tutti\n");
Aggiunge al file identificato dal flusso di file MIO_FILE il messaggio ciao a tutti.
sprintf formato , lista
sprintf() restituisce una stringa formattata in modo analogo a quanto fa la funzione omonima del linguaggio C. Il primo argomento è la stringa da formattare, quelli successivi sono i valori da inserire. Perl utilizza una propria gestione della conversione secondo quanto riportato nelle tabelle 7.6 e 7.7.
Tabella 7.6. Elenco dei simboli utilizzabili in una stringa formattata per l'utilizzo con sprintf().
Tabella 7.7. Elenco dei simboli utilizzabili tra il segno di percentuale e la lettera di conversione.
Quando il simbolo è formato da un numero, al posto di tale numero può essere utilizzato l'asterisco (*) intendendo in questo modo di utilizzare il valore inserito nell'elemento successivo.
sprintf() è sensibile all'attivazione della localizzazione, nel qual caso, il carattere utilizzato per separare le cifre intere da quelle decimali, dipende dalla variabile di ambiente LC_NUMERIC.
tell flusso
tell() restituisce la posizione corrente del puntatore interno riferito al flusso di file indicato come argomento, oppure a quello dell'ultima operazione di lettura eseguita.
Nel gruppo di sezioni seguenti vengono descritte alcune funzioni per l'interazione con il sistema.
Tabella 7.8. Elenco di alcune funzioni riferite all'interazione con il sistema.
exec elenco
exec() avvia l'esecuzione del comando indicato negli argomenti, senza riprendere l'esecuzione del programma al termine. Si comporta quindi in modo analogo al comando interno omonimo delle shell comuni.
... exec ("ls"); ...
Esegue il comando ls e conclude il funzionamento del programma. In pratica, le istruzioni successive a exec(), non vengono eseguite.
kill segnale , elenco_di_processi
kill() invia un segnale a una serie di processi. Il primo argomento deve essere il segnale. Restituisce il numero di processi che hanno ricevuto il segnale.
kill ("TERM", 588);
Invia il segnale SIGTERM al processo numero 588.
kill (15, 588);
Esattamente come nell'esempio precedente.
kill (-15, 588);
Come nell'esempio precedente, ma il segnale viene inviato anche a tutti i processi discendenti da quello indicato.
sleep secondi
sleep() mette in pausa l'esecuzione del programma, per il numero di secondi indicato come argomento, eventualmente attraverso un'espressione. Se l'argomento non viene indicato, la pausa non ha fine. L'attesa può essere interrotta inviando un segnale SIGALRM al processo. Restituisce il numero di secondi trascorsi effettivamente.
sleep;
Mette il programma in pausa senza specificare la fine di questa.
sleep (10);
Mette il programma in pausa per 10 secondi.
sleep ($pausa);
Mette il programma in pausa per la quantità di secondi indicata dalla variabile $pausa.
system elenco
system() avvia l'esecuzione del comando indicato negli argomenti, attende la sua conclusione e restituisce il valore generato dal comando stesso.
system ("ls");
Esegue il comando ls e poi riprende con il programma.
if (system ("mkdir ciao") { die("La creazione della directory è fallita\n"); } else { print ("La directory è stata creata\n"); }
L'esempio mostra il caso in cui si voglia controllare l'esito di un comando di sistema avviato attraverso la funzione system(). Se il comando mkdir ciao viene eseguito con successo, restituisce il valore zero, che per Perl equivale a Falso. Quindi, se la condizione si avvera, significa che l'operazione è fallita, altrimenti, tutto è andato bene.
time
time() restituisce la data e l'ora attuale espressa in secondi trascorsi dalla data iniziale gestita dal sistema. Nel caso della maggior parte dei sistemi Unix si tratta dell'ora zero del 1/1/1970. Il valore ottenuto da time() può essere utilizzato dalle funzioni gmtime() e localtime()
times
times() restituisce un array di quattro elementi che indicano rispettivamente:
orario dell'utente;
orario di sistema;
orario dell'utente del processo figlio;
orario di sistema del processo figlio.
($user, $system, $cuser, $csystem) = times;
Scompone l'array restituito da times() in quattro variabili scalari.
umask maschera_numerica
umask() permette di definire la maschera dei permessi per il processo elaborativo del programma. Restituisce il valore precedente.
La maschera è espressa in forma numerica; ciò significa che se la maschera da indicare come argomento è una stringa, potrebbe essere necessario l'utilizzo della funzione oct() per garantire l'interpretazione ottale e non a base 10.
$maschera = '644'; umask (oct ($maschera));
Modifica la maschera dei permessi in modo che sia pari a 06448. Dal momento che l'informazione è contenuta in una stringa, che per di più non ha lo zero iniziale della rappresentazione ottale convenzionale, occorre convertire prima la stringa in numero nel modo corretto.
Perl fornisce una serie di funzioni matematiche tipiche della maggior parte dei linguaggi di programmazione.
Nome | Descrizione. |
abs() | Calcola il valore assoluto. |
atan2() | Calcola l'arcotangente dell'intervallo da -PI a +PI. |
cos() | Calcola il coseno. |
exp() | Calcola l'esponente. |
int() | Estrae la parte intera. |
log() | Calcola il logaritmo naturale. |
sin() | Calcola il seno. |
sqrt() | Calcola la radice quadrata. |
Tabella 7.9. Elenco di alcune funzioni matematiche.
abs x
abs() restituisce il valore assoluto del suo argomento. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
atan2 x , y
atan2() restituisce l'arcotangente nell'intervallo da -PI a +PI.
cos x
cos() restituisce il coseno. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
exp x
exp() restituisce e (la base del logaritmo naturale) elevato al valore di x , cioè dell'argomento. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
int x
int() restituisce la parte intera del numero (o dell'espressione) fornito come argomento. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
log x
log() restituisce il logaritmo naturale del valore fornito come argomento. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
sin x
sin() restituisce il seno. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
sqrt x
sqrt() restituisce la radice quadrata. Se l'argomento non viene indicato, si utilizza la variabile predefinita $_.
Nelle sezioni seguenti sono elencate le funzioni che si occupano di convertire dati in formati differenti.
Nome | Descrizione. |
chr() | Converte un numero nel carattere corrispondente. |
hex() | Converte una stringa esadecimale nel numero corrispondente. |
oct() | Converte una stringa ottale nel numero corrispondente. |
ord() | Converte un carattere nel numero corrispondente. |
Tabella 7.10. Elenco di alcune funzioni di conversione.
chr n
chr() restituisce il carattere corrispondente al numero indicato come argomento. Se non viene specificato l'argomento, il numero viene letto dalla variabile $_.
chr (65);
Restituisce la lettera A maiuscola.
hex stringa
hex() interpreta il proprio argomento come una stringa contenente un numero esadecimale. Restituisce il numero (decimale) corrispondente. Se non viene specificato l'argomento, il dato viene letto dalla variabile $_.
hex ("0xAf");
Restituisce il numero 175.
hex ("af");
Restituisce il numero 175.
oct stringa
oct() interpreta il proprio argomento come una stringa contenente un numero ottale. Restituisce il numero (decimale) corrispondente. Se non viene specificato l'argomento, il dato viene letto dalla variabile $_.
$permessi = '0755'; mkdir ("/tmp/prova", oct ($permessi));
Crea la directory /tmp/prova/
con i permessi 07558. Dal momento che questi permessi sono contenuti in una variabile, in forma di stringa, devono essere convertiti in ottale prima dell'uso, altrimenti verrebbero interpretati in forma decimale.
ord stringa
ord() restituisce il valore numerico corrispondente al codice ASCII del primo carattere della stringa fornita come argomento. Se non viene specificato l'argomento, il dato viene letto dalla variabile $_.
Sono elencate nelle sezioni seguenti le funzioni che si occupano di gestire l'esecuzione delle espressioni (quando necessario) e di conoscerne alcune caratteristiche.
defined espressione
defined() restituisce Vero se l'espressione (o la variabile) restituisce un valore diverso da indefinito. Il valore indefinito può essere restituito in particolare nelle seguenti situazioni:
la lettura oltre la fine del file;
un errore di sistema;
una variabile non ancora inizializzata.
È importante non confondere il valore indefinito con lo zero o la stringa vuota: si tratta di tre cose differenti, in particolare, zero e stringa vuota sono valori definiti.
scalar espressione
scalar() restituisce il risultato dell'espressione valutato in un contesto espressamente scalare.
Nelle sezioni seguenti sono elencate le funzioni che sono particolarmente dedicate alla gestione di array e hash.
Tabella 7.11. Elenco di alcune funzioni utili nella gestione degli array.
delete espressione
delete() elimina uno o più elementi da un hash. L'espressione che rappresenta l'argomento della funzione deve rappresentare uno o più elementi dell'hash. Restituisce i valori cancellati, cioè quelli abbinati alle chiavi indicate per la cancellazione.
delete $miohash{ $miachiave };
Elimina dall'hash %miohash l'elemento rappresentato dalla chiave contenuta nella variabile $miachiave.
exists espressione
exists() verifica l'esistenza di una chiave all'interno di un hash. Se esiste, anche se il valore corrispondente dovesse risultare indefinito, restituisce Vero. L'espressione che rappresenta l'argomento della funzione deve rappresentare un solo elemento dell'hash.
if (exists $miohash{ $miachiave }) { ... }
Verifica l'esistenza dell'elemento rappresentato dalla chiave contenuta nella variabile $miachiave, all'interno dell'hash %miohash. In caso affermativo esegue alcune istruzioni.
keys hash
keys() restituisce un array composto da tutte le chiavi dell'hash posto come argomento.
pop array
pop() restituisce l'ultimo elemento dell'array eliminandolo dall'array stesso (accorciandolo). In pratica tratta l'array come una pila (stack) ed esegue un'azione di pop.
push array , lista
push() aggiunge all'array indicato come primo argomento gli elementi della lista successiva. In pratica tratta l'array come una pila (stack) ed esegue un'azione di push.
splice array , posizione_iniziale , lunghezza , lista
splice array , posizione_iniziale , lunghezza
splice array , posizione_iniziale
splice() elimina dall'array, indicato come primo argomento, gli elementi collocati a partire dalla posizione iniziale, indicata come secondo argomento, per una quantità definita dal terzo argomento. Se il terzo argomento (la quantità di elementi da eliminare) viene omesso, vengono eliminati tutti gli elementi a partire dalla posizione iniziale.
Se dopo il numero di argomenti da eliminare appaiono altri argomenti, vengono interpretati come una lista da inserire in sostituzione degli elementi cancellati. In tal modo, attraverso questa funzione, si può accorciare e allungare un array a piacimento, intervenendo in qualunque punto dello stesso.
Nelle sezioni seguenti sono elencate le funzioni che sono utili per controllare l'esecuzione di un programma Perl. In particolare ciò che permette di gestire le situazioni di errore.
Tabella 7.12. Elenco di alcune funzioni per il controllo dell'esecuzione del programma.
die lista
die() emette il contenuto degli elementi della lista fornita come argomento attraverso lo standard error e quindi termina l'esecuzione del programma.
Il programma Perl terminato in questo modo restituisce generalmente il valore contenuto dalla variabile $!.
if (chdir '/var/spool/lpd') { ... } else { die "L'operazione non è consentita.\n"; }
Se lo spostamento nella directory /var/spool/lpd/
fallisce, visualizza il messaggio attraverso lo standard error e termina.
do file
do() permette di includere il file indicato come argomento. In generale viene usato per inserire delle subroutine esterne.
do 'prova.pl';
Esegue il contenuto del file prova.pl
.
eval blocco
eval espressione
eval() permette di controllare l'esecuzione di un blocco di istruzioni, in modo da limitare i danni in caso di interruzione. In pratica, se all'interno del blocco si manifesta un errore di sintassi o di esecuzione, o ancora se viene incontrata un'istruzione die(), eval() restituisce un valore indefinito e l'esecuzione del programma continua.
Se si manifesta un errore, questo viene riportato dalla variabile $@.
Nel caso non si verifichino errori, eval() restituisce il valore dell'ultima espressione del blocco di istruzioni controllato.
exit espressione
exit() valuta l'espressione posta come argomento e termina l'esecuzione del programma restituendo all'esterno quel valore.
È importante ricordare che dal punto di vista dei programmi, la restituzione del valore zero corrisponde a una conclusione con successo, mentre un valore pari a uno o superiore, rappresenta una conclusione anomala.
if (chdir '/var/spool/lpd') { ... } else { print "L'operazione non è consentita.\n"; exit 1; }
Se lo spostamento nella directory /var/spool/lpd/
fallisce, visualizza il messaggio e termina restituendo il valore uno.
require espressione
require file
require() permette di specificare nel programma l'esigenza di qualcosa. Se si tratta di un'espressione il cui risultato è numerico, si vuole indicare che il programma richiede un interprete perl di versione maggiore o uguale a quel numero. Se si tratta di una stringa si intende che il programma richiede l'inclusione del file corrispondente come libreria.
L'inclusione del file si ottiene solo se ciò non è già avvenuto.
warn lista
warn() emette il contenuto degli elementi della lista fornita come argomento attraverso lo standard error. Solitamente, warn() viene utilizzato come die() nelle situazioni in cui non è necessario interrompere l'esecuzione del programma.
Johan Vromans, Perl 5 Desktop Guide, O'Reilly & Associates
1) Anche se la documentazione fa esplicito riferimento a questa possibilità, può darsi che non sia possibile evitare di indicare i permessi. Nello stesso modo, anche se si indicano i permessi non è garantito che questi vengano rispettati fedelmente dal sistema operativo sottostante, come descritto nell'esempio successivo.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome perl_funzioni_interne.html
[successivo] [precedente] [inizio] [fine] [indice generale] [indice analitico]