Le cosiddette "builtin functions" sono i normali 'comandi' del perl, che accettano argomenti, fanno qualcosa a livello degli argomenti o di sistema, e danno in ritorno dei valori. Per informazioni più dettagliate, si veda "man perlfunc".
Molte funzioni non hanno bisogno di argomenti tra (), ma nelle operazioni più complicate le parentesi tonde sono necessarie per chiarire cosa è riferito a cosa. Tipicamente, quindi, le () si evitano nelle linee più semplici, come print $bleah; , ma devono essere incluse quando c'è più di una funzione che viene invocata nella stessa dichiarazione.
Le dichiarazioni in perl terminano sempre con il segno ;
Funzioni (in ordine alfabetico):
sub tan { sin($_[0]) / cos($_[0]) }
open (FILE, file.bin);
binmode FILE;
chdir ($HOME) or die "You're homeless!n";
chmod 0644, "README", "INSTALL";
@list = ( "abc", "def", "ghi")
chmod 755, @list;
$a = "scalare"; $b = chop($a);
Nella maggior parte dei casi, non ci interessa il valore restituito, quindi basta semplicemente dare:chop $a;
oppure solamente:chop;
che opera con $_ . Si noti che, ai nostri fini, chomp è equivalente a chop.chown $uid, $gid, @filenames;
oppurechown $uid, $gid, 'file1', 'file2' ...... ;
do BLOCCO;
Un'utile implementazione di "do" può essere quella di ripetere una porzione dicodice finchè una certa condizione sia verificata. Vediamo come:
do {
print "Scegli 1 o 2n";
chop($sel=<StdIN>);
until " 1 2 " =~ / $sel /;
if ($sel == '1') {
print "Hai scelto 1n";
} elsif ($sel == '2') {
print "Hai scelto 2n";
}
In pratica, questo script visualizza "hai scelto 1" o "hai scelto 2" a seconda del tasto premuto dall'utente, a meno che questi abbia premuto qualsiasi altro tasto: in questo caso, lo script si disinteressa del tasto premuto e continua a visualizzare "Scegli 1 o 2". A cosa può servire tutto questo? Semplice: togliete da questo script le prime quattro linee e premete "3" quando vi viene chiesto di scegliere 1 o 2: lo script si blocca ed esce: non succede niente di male, sia chiaro, ma se avete uno script di qualche centinaio di righe che si blocca per una simile piccolezza, la cosa può dare fastidio.
if ($num != 18) {
die "Non è 18n";
}
do 'script.pl';
eval `cat script.pl`;
Attenzione agli apici inversi: ' questo è un apostrofo ` questo è l'apice inverso
exit 0;
per uscire con successo
exit 1; o qualsiasi valore diverso da 0
esce senza successo.
La differenza con die è che die viene utilizzato nei casi tipo "questo non sarebbe dovuto succedere".
$bah = (":", "eek", "niente", 34);
$bah diventa "eek:niente:34"
@array = ("uff", "abc", "foo");
print (join(" ", @array, "eek"), "n");
visualizza "uff abc foo eek"
$bla{'eek'} = "*pat*";
$bla{'uff'} = "erp";
@thekeys = keys(%bla);
@thekeys è ("eek", "uff")
print (join(" ", keys(%bla)), "n";);
visualizza "eek uff"
LINE: while <StdIN> {
last LINE if /^$/;
esce quando ha terminato con gli headers
.......
il resto del ciclo
}
$n = "blip";
$l = $lenght($n);
$l è 4
print (lenght(34), "n");
restituisce 2
link OLDFILE, NEWFILE
local $variabile;
dichiara $variabile locale
local (@array, %hash);
dichiara la lista di variabili locali
local $var = "valore";
dichiara $var locale e le assegna un valore
Per una trattazione più completa, si veda la sezione 'Temporary Values via local()' in man perlsub.
mkdir "files", 0755;
o meglio:
if (!mkdir("files", 0755)) {
die "failed to create directoryn";
}
LINE: while (<StdIN>) {
next LINE if /^#/;
altro
}
open /usr/src/linux/README
Apre il file
open log >> /tmp/log
Apre il file log e ne passa il contenuto a /tmp/log, senza sovrascriverlo
open <file;
Apre il file per la modifica
open(FILE, "<miofile;");
Come sopra, solo che poi sarà possibile agire su FILE
print "Hello worldn";
quante volte vedrete questo esempio!
$bla = 3
print "Il valore di 'bla' è $blan";
visualizza "il risultato di 'bla è 3"
@bla = ("a");
$arr = "xterm";
push(@bla, "eek", $arr, 12.5)
@bla risulta ( "a","eek", $arr, 12.5);
quotemeta ".*" restituisce ".*"
rand La funzione random. Passando un argomento numerico alla funzione, questa restituirà un valore casuale compreso tra 0 e il numero indicato. Se non è fornito alcun argomento, restituirà un valore compreso tra 0 e 1, estremi inclusirmdir "temp_dir";
@bla = ("a", "xterm", 12.5);
$v = shift @bla;
# @bla è ("xterm", 12.5) e $v è "a"
symlink OLDFILE, NEWFILE
Nei sistemi che non prevedono i link simbolici, la funzione uscirà con un errore. In questo caso si veda la funzione link().system ("comando", "istruzioni")
undef %bla;
si sbarazza dell'hash %bla
undef $eek;
si sbarazza dello scalare $eek
$eek = undef;
come sopra
unlink "tempfile";
unlink "tempfile", "altrifile";
@bla = ("a", "b");
$arr = "xterm";
unshift(@bla, "eek", $arr, 12.5); # @bla è ("eek", "xterm", 12.5,
warn "debugger enebled" if $debug;
$_ = <>;
legge una linea in $_
chop;
esegue chop su n
print "Hai scritto '$_'n";
visualizza l'output, ovvero quello che si è digitato preceduto da "Hai scritto"
Windows 8 Store, un posto in prima filaLa pre-certificazione che permetterà di avere le nostre applicazioni... |
La concorrenza con C++11, async e la libreria ThreadingLa libreria Threading e i principali costrutti per sfruttare il... |
Visual Studio 11 beta, le novitàLe caratteristiche più interessanti introdotte nella beta di Visual... |
Windows 8, WinRT API e applicazioni Metro StyleCome creare una semplicissima interazione in stile Metro con C++... |
C++11, la libreria standardLe funzioni sugli insiemi e i contenitori mutuati dalle estensioni... |
Azure, una nuvola tanti linguaggiEntrare con semplicità ed efficacia nel mondo di Windows Azure e... |
Guida AntipatternCome evitare le cattive abitudini, le worst practices e le trappole... |
RESTful Web Services - La GuidaDai principi ispiratori del Web programmabile e delle architetture... |
Ogni settimana, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.
Iscriviti alla newsletter
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |