|
Desenvolupament de Funcions pels
Sistemes Informàtics
|
ASI-2
|
GNU/Linux
|
Arxius de Guió
(Scripts) utilitzant llenguatge Perl - I
|
18/01/10
|
Arxius de
guió (Scripts) utilitzant
llenguatge Perl - I
1- Documentació
Pagines
principals
Pàgina oficial:
www.perl.com
The Perl Directory: www.perl.org
CPAN: Biblioteca de
recursos Perl.
Perl Foundation:
http://www.perlfoundation.org/
Documentació
http://perldoc.perl.org/
http://perldoc.perl.org/perl.html
http://www.cs.cmu.edu/cgi-bin/perl-man
http://www.perlfoundation.org/perl5/index.cgi
http://www.geocities.com/SiliconValley/Station/8266/perl/
http://www.ulpgc.es/otros/tutoriales/perl/cap1.htm
Contenidors d'arxius de guió (Script repositories)
http://www.cpan.org/scripts/index.html
http://www.microsoft.com/technet/scriptcenter/scripts/perl/default.mspx?mfr=true
http://www.roth.net/perl/scripts/
2- GUI IDE Geany
a) Icona de compil.lació
b) Icona
d'execució
3- Execució d'arxius de guió Perl
a) Crea un
fitxer de nom perl1.pl amb
el següent codi:
#! /usr/bin/perl
print "Hola mon!!!! \n";
b) Fes-ho
executable:
chmod 755 perl1.pl
c) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl1.pl
d) Una manera alternativa d'execució és cridar a
l'arxiu de guió amb l'interpret de perl, de la
següent manera:
perl perl1.pl
i en aquest cas, no cal fer executable l'arxiu de guió.
4- Declaració de variables
a) La declaració de variables fa per mitja de
l'ordre my. Les variables en
el moment de la declaració no tenen format. S'assigna format
per mitjà de l'assignació d'una cadena o
número a la variable.
El valor per defecte d'una variables és 0 o "" (Valor que
serà assignat la primera vegada que utilitzem la variable,
en funció de la instrucció executada).
b) Crea un
fitxer de nom perl2.pl amb
el següent codi:
#! /usr/bin/perl
my $variable = "Hola mon!!!";
my $num=3;
print $variable;
print $num;
c)
Fes-ho executable:
chmod 755 perl2.pl
d) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl2.pl
5- Comentaris
a) Qualsevol línia que comenci per # serà
tractada com un comentari i no serà executada
b) Crea
un fitxer de nom perl3.pl
amb el següent codi:
#! /usr/bin/perl
my $variable = "Hola mon!!!";
my $num=3;
print $variable;
#print $num;
c)
Fes-ho executable:
chmod 755 perl3.pl
d) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl3.pl
6- Ordre print
a) Com ja hem vist a la resta d'exemples, l'ordre print permet
imprimir a la pantalla una cadena de caràcters,
número o variable que li sigui passada com a
paràmetre. La coma ,
serveix per serparar variables, número o
cadenes a imprimir. El canvi de línia és \n. El retorn al
principi de línia és \r.
Amb les dobles cometes, la coma deixa de ser un caràcter
especial.
b) Crea un
fitxer de nom perl4.pl amb
el següent codi:
#! /usr/bin/perl
my $variable = "Hola mon!!!";
my $num=3;
my $num1=4;
my $num2=5;
print $variable,$num;
print "$variable,$num";
print "$variable,$num\n";
print "$variable,$num1\r";
print "$variable,$num2\n";
print "$variable,$num1\n";
print "$variable,$num2\n";
print "El valor de num1 és $num1"
c) Fes-ho
executable:
chmod 755 perl4.pl
d) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl4.pl
7- Assignació d'una entrada del teclat a una variable
a) Crea
un fitxer de nom perl5.pl
amb el següent codi:
#!/usr/bin/perl
my $nom;
print "Escriu el teu nom:";
$nom=<STDIN>; #Assignació de $nom al valor del
fitxer d'entrades standard, o sigui, el teclat.
chop($nom); #LA funció chop() suprimeix l'últim
caràcter del contingut d'una variable que contingui una
cadena. En el nostre cas és <Enter>.
print "Hola, $nom!!!\n";
b) Fes-ho
executable:
chmod 755 perl5.pl
c) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl5.pl
d) Executeu
el mateix script, sense utilitzar la funció chop().
8- Operadors
numèrics
Per veure tots els operadors posibles, aneu a
--> http://perldoc.perl.org/perlop.html
a) Els operadors numèrics són:
a.1)
+ (Suma)
a.2) - (Substracció)
a.3)
* (Multiplicació)
a.4)
/ (Divisió)
a.5) **
(Potència).
b) Crea un
fitxer de nom perl6.pl amb
el següent codi:
#!/usr/local/bin/perl
my $num1,$num2,$num3;
print "Escriu el primer número:";
$num1=<STDIN>;
chop($num1);
print "Escriu el segon número:";
$num2=<STDIN>;
chop($num2);
$num3=$num1+$num2;
print "La suma de $num1 i $num2 és $num3\n";
$num3=$num1-$num2;
print "La substracció de $num1 i $num2 és
$num3\n";
$num3=$num1*$num2;
print "La multiplicació de $num1 i $num2 dóna
$num3\n";
$num3=$num1/$num2;
print "La divisió de $num1 i $num2 és $num3\n";
$num3=$num1**$num2;
print "La potència $num1 elevat a $num2 és
$num3\n";
b) Fes-ho
executable:
chmod 755 perl6.pl
c) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl6.pl
9- Comparacions numèriques
a)
Els símbols de comparació numèrica
són:
a.1)
"<"
És TRUE si el valor de l'esquerra és
més petit que el de la dreta.
a.2) ">"
És TRUE si el valor de
l'esquerra és més gran que el de la
dreta.
a.3)
"= ="
És TRUE si el valor de l'esquerra és igaual al de
la dreta.
a.4)
"<=" És TRUE
si el valor de l'esquerra és igual o més petit
que el de la dreta.
a.5)
">=" És TRUE
si el valor de l'esquerra és igual o més gran que
el de la dreta.
a.6) "!="
És TRUE si el valor de l'esquerra no és
igual al de la dreta.
b)
S'utilitza en combinació amb les instruccions if...else, while, until. Veurem
aquestes ordres més endavant.
10- Operadors amb cadenes de caràcters
a) El
símbols més típics
són
a.1) .
Concatenació de cadenes de
caràcters.
a.2) lt
És TRUE si el valor de
l'esquerra és més gran que el de la
dreta.
a.3)
gt
És TRUE si el valor
de l'esquerra és igaual al de la dreta.
a.4)
le És TRUE si el
valor de l'esquerra és igual o més petit que el
de la dreta.
a.5)
ge És TRUE si el
valor de l'esquerra és igual o més gran que el de
la dreta.
a.6) eq
És TRUE si el valor de
l'esquerra no és igual al de la dreta.
a.7)
ne És TRUE si el
valor de l'esquerra no és igual al de la dreta.
b) Crea un fitxer
de nom perl7.pl amb
el següent codi:
#!/usr/bin/perl
my $var;
$var="HOLA"." JOAN";
print "$var";
c) Fes-ho
executable:
chmod 755 perl7.pl
d) Executa-ho (en aquest cas, des del directori on ha
estat desat):
./perl7.pl
e) Els simbols lt....ne s'utilitzen en
combinació amb
les estructures if...else,
while,until.
Veurem
aquestes estructures més endavant.
11- Operadors lògics
a) && ,and -->
AND
b) ||,or --> OR
c)
not --> Negació
d) Els operadors lògics
s'utilitzen en combinació amb l'estructura
if...else.
Veurem aquesta estructura més endavant.
12- Estructura if..else. Ordre unless
Exemple
1
#!/usr/bin/perl
my $edat,$dif;
print "Escriu la teva edat: ";
$edat=<STDIN>;
chop($edat);
if ( $edat > 18 )
{
print "Vostè és
major d'edat. Pot votar\n";
#Tot i que només hi ha una
instrucció, cal obrir i tancar la instrucció if
amb { i }
}
else
{
print "Vostè és
menor d'edat. No pot votar\n";
$dif=18-$edat;
print "Vostè
s'haurà d'esperar $dif anys per poder votar\n";
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl8.pl.
Exemple 2
#!/usr/bin/perl
my $cad1,$cad2;
print "Escriu la primera cadena: ";
$cad1=<STDIN>;
chop($cad1);
print "Escriu la segona cadena: ";
$cad2=<STDIN>;
chop($cad2);
if ( $cad1 lt $cad2)
{
print "$cad1\n";
print "$cad2\n";
}
else
{
print "$cad2\n";
print "$cad1\n";
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl9.pl.
Exemple3
#!/usr/bin/perl
my $cad1,$cad2;
my $num1,$num2;
print "Escriu la primera cadena: ";
$cad1=<STDIN>;
chop($cad1);
print "Escriu la segona cadena: ";
$cad2=<STDIN>;
chop($cad2);
print "Escriu el primer número: ";
$num1=<STDIN>;
chop($num1);
print "Escriu el segon número: ";
$num2=<STDIN>;
chop($num2);
if (( $cad1 lt $cad2) and ($num1 >= $num2))
{
print "$cad1\n";
print "$cad2\n";
}
else
{
print "$cad2\n";
print "$cad1\n";
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl10.pl.
Exemple
4: Treballant amb unless
#!/usr/bin/perl
my $edat,$dif;
print "Escriu la teva edat: ";
$edat=<STDIN>;
chop($edat);
print "Vostè és major d'edat. Pot votar\n" if (
$edat > 18 );
print "Vostè no és major d'edat. No pot votar\n"
unless ( $edat > 18 );
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl11.pl.
13- Estructura
given..when --> Estrucutures de tipus switch
a) Documentació:
http://perldoc.perl.org/perlsyn.html#Switch-statements
NOTA: Aquesta
estructura només és vàlida a partir de la
versió 5.10 de perl
b) Exemple:
#!/usr/bin/perl
use feature ":5.10";# use
my $opc;
print "Escriu la teva opció: ";
$opc=<STDIN>;
chop($opc);
given($opc)
{
when (1)
{ say
"Has escollit la 1a opció"; }
when (2)
{ say
"Has escollit la 2a opció";}
when (3)
{ say "Has
escollit la 3a opció";
}
default { say
"Opció incorrecta" }
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl12.pl.
14- Estructura while
a) L'estructura de while és la
següent:
while (condició)
{
ordre_de_perl;
.......
.......
}
b) Exemple
#!/usr/bin/perl
my $num1,$num2,$num3,$opc;
$opc="s";
while ($opc eq "s")
{
print "Escriu el primer
número:";
$num1=<STDIN>;
chop($num1);
print "Escriu el segon
número:";
$num2=<STDIN>;
chop($num2);
$num3=$num1+$num2;
print "La suma de $num1 i $num2
és $num3\n";
$num3=$num1-$num2;
print "La substracció de
$num1 i $num2 és
$num3\n";
$num3=$num1*$num2;
print "La multiplicació de
$num1 i $num2 dóna
$num3\n";
$num3=$num1/$num2;
print "La divisió de $num1 i
$num2 és $num3\n";
$num3=$num1**$num2;
print "La potència $num1
elevat a $num2 és
$num3\n";
print "\n";
print "continua (s/n):";
$opc=<STDIN>;
chop($opc)
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl13.pl.
15- Estructura until
a) L'estructura de while és la
següent:
until (condició)
{
ordre_de_perl;
.......
.......
}
b) Exemple
#!/usr/bin/perl
my $num1,$num2,$num3,$opc;
$opc="s";
until ($opc eq "n")
{
print "Escriu el primer
número:";
$num1=<STDIN>;
chop($num1);
print "Escriu el segon
número:";
$num2=<STDIN>;
chop($num2);
$num3=$num1+$num2;
print "La suma de $num1 i $num2
és $num3\n";
$num3=$num1-$num2;
print "La substracció de
$num1 i $num2 és
$num3\n";
$num3=$num1*$num2;
print "La multiplicació de
$num1 i $num2 dóna
$num3\n";
$num3=$num1/$num2;
print "La divisió de $num1 i
$num2 és $num3\n";
$num3=$num1**$num2;
print "La potència $num1
elevat a $num2 és
$num3\n";
print "\n";
print "continua (s/n):";
$opc=<STDIN>;
chop($opc)
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl14.pl.
15- Estructura foreach
a) L'estructura
de foreach és la
següent:
foreach $var
(llista de número, noms del fitxers, elements d'un
array,caràcters....)
{
ordre_de_perl;
.......
.......
}
El bucle es repeteix tantes vegades com elements hi ha a la llista. En
cada iteració del bucle, a la variable $var pren un
dels valors de la llista.
b) Exemple
#! /usr/bin/perl
my $x,$uid,$gid;
$uid="root";
$gid="daemon";
foreach $x ("/home/asi2/prova1.pl","/home/asi2/prova2.pl")
{
print "Canviant els permisos de $x\n";
chmod 0444, $x;
print "Canviant el propietari i el grup de $x\n";
chown $uid,$gid,$x
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl15.pl.
16- Estructura for
a) L'estructura
de for és la
següent:
for (estat_inicial;
test_condició_sortida_bucle, incr)
{
ordre_de_perl;
.......
.......
}
El
bucle es repeteix mentre no es compleixi la condició de
sortida del bucle.
b) Exemple
#! /usr/bin/perl
my $x,$pot2;
for ($x=0;$x<=20;$x++)
{
$pot2=2**$x;
print "La potència en base 2
de $x és $pot2\n";
}
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl16.pl.
17- Estrucura alternativa
a given..when per realitzar un equivalent al switch..case de C
Si utilitzem una estructura com la següent,
podrem simular un switch..case de C:
#! /usr/bin/perl
my $opc;
print "Escriu l'opció: ";
$opc=<STDIN>;
chop($opc);
switch:
{
if ($opc==1) {print "Has
escollit la primera opció"; last switch;}
if ($opc==2) {print "Has
escollit la segona opció"; last switch;}
if ($opc==3) {print "Has
escollit la tercera opció"; last switch;}
printf "Opció
incorrecta";
}
a) switch és una etiqueta, no una instrucció.
b) Aquesta estrucutura rep el nom de BLOCK amb etiqueta,
que és similar a un bucle que s'executés
només una vegada.
c) L'ordre last
és com l'ordre break de C. Finalitza
immediatament el bucle indicat a continuació amb un nom
d'etiqueta. En el nostre cas,finalitza el bucle etiquetat amb el nom
switch. O sigui, fa la mateixa funció que break de C dins
d'un switch..case.
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom perl17.pl.
18- Ordres last,next,goto,redo pel control de bucles
a)
L'ordre last o last ETIQUETA
és com l'ordre break de C. Finalitza
immediatament el bucle indicat a continuació amb un
nomd'etiqueta.
Si no es posa l'etiqueta , l'ordre sortirà del
bucle més interior en el qual es trobi en aquell moment el
programa. Es pot utilitzar en bucles for, while, until,.....
b) L'ordre
next o next ETIQUETA és
com l'ordre continue de
C. Finalitza l'actual iteració del bucle, sense importar en
el estat a on es trobi en aquell moment, i continua amb la
següent iteració del bucle.Si no es posa
l'etiqueta , l'ordre sortirà del bucle
més interior en el qual es trobi en aquell moment el
programa. Es pot utilitzar en bucles for, while, until,.....
c) L'ordre redo o redo ETIQUETA finalitza l'actual
iteració del bucle, sense importar en el estat a on es trobi
en aquell moment i torna a reiniciar el bucle des el principi.Si no es
posa l'etiqueta , l'ordre
sortirà del bucle més interior en el qual es
trobi en aquell moment el
programa. Es pot utilitzar en bucles for, while, until,.....
d) L'ordre goto ETIQUETA fa un
salt a l'etiqueta indicada, de la mateixa manera que ho feia el goto
dels arxius tipus ".bat". No és una
instrucció recomanada.
19- LListes
(també anomenades arrays)
a) S'indexen a partit de zero.
b) No
té una dimensió fixe.
c) No tots
els elements de la llista han de ser del matexi tipus (podem barrejar,
cadenes, números,..)
d) No es
pot fer una llista de llistes
e) Declaració de
variable:
my
@llista;
f) Assignació:
@llista=(0,2,4,6);
g) Accés a una dada:
$dada=@llista[2]; (En
aquest cas, el contingut de $dada serà 4)
h)
Modificació d'una dada:
@llista[2]=8;
i) Afegint nous element a la llista:
push @llista,$num;
(Si p.ex, $num valgués 15, llavors @llista=(0,2,4,6,15))
j) Obtenció
del número d'elements de l'array:
$num=@llista; (Ara $num
valdrà 5)
k)
Obtenció i eliminació del primer element d'una
llista:
$num=shift
@llista; (Ara llista torna a tenir 4 elements, i val
@llista=(2,4,6,15))
k)
Obtenció i eliminació de l'últim
element d'una llista:
$num=pop
@llista; (Ara llista té 3 elements, i val
@llista=(2,4,6))
l)
Inversió de la posició dels elements d'una llista:
@llista_rev=reverse(@llista); (Ara llista_rev val
@llista_rev=(6,4,2))
m)
Ordenació d'una llista de caràcters. Si
@llista=("Hola",
"Prova","Dilluns", "adeu","Llengua"),
i escrivim
l'ordre
@llista_ord=sort(@llista),
llavors
llista_ord serà
una nova llista amb els elements de
llista
ordenats a partir del seu codi ascii.
n)
Conversió d'una cadena en una llista de cadenes:
@llista=split(' ',$frase); (En
aquest cas, l'element separador ha estat l'espai en blanc)
o) Unió de
cadenes en una única cadena:
join(' ',@llista,$cadena);
p) Exemples:
#! /usr/bin/perl
my @llista,$num,$string,$frase,@llista_ord;
@llista=(1,2,4,6);
$num=@llista[2];
print "$num\n";
$num=3;
@llista[2]=$num;;
print "@llista[2]\n";
$num=18;
push @llista,$num;
print "@llista[0]\n";
print "@llista[4]\n";
$num=@llista;
print "$num\n";
@llista=("Hola", "Prova","Dilluns", "adeu","Llengua");
@llista_ord=sort(@llista);
foreach $string (@llista_ord)
{
print "$string,";
}
print "\n";
$frase="Provant ordre split";
@llista=split(' ',$frase);
foreach $string (@llista)
{
print "$string\n";
}
$string="join";
@llista=("Provant","ara","la","instrucció");
$frase=join(' ',@llista,$string);
print "$frase\n";
Comprova el seu funcionament, creant un fitxer amb aquest codi, de nom
perl18.pl.
20- Funcions o subrutines
a) Definició:
sub nom_rutina
{
ordres_perl;
}
No cal declarar paràmetres.
b) Utilització:
$var=&nom_rutina(paràmetres);
$var=&nom_rutina();
&nom_rutina(paràmetres);
&nom_rutina();
c) Paràmetres:
Les
rutines reben,
per valor,
tots els paràmetres dins d'una variable especial anomenada
@_ i cada
paràmetre es pot recuperar individualment fent servir $_[0],
$_[1],$_[2]....Es un sistema molt similar a l'utilitzat en C per pasar
paràmetres a un programa durant la seva execució,
o sigui, per pasar paràmetres a la funció
main(argc,argv).
Exemple1
#!
/usr/bin/perl
my $f,$c;
sub suma
{
local($x,$y)=@_;
#Hem decalarat $x i $y com a locals
return($x+$y);
}
$f=8;
$c=&suma(4,$f);
print "El resultat és $c";
Comprova el seu funcionament, creant un fitxer amb aquest
codi, de nom perl19.pl.
Exemple2
#! /usr/bin/perl
#Duplica $c
my $c;
sub duplica()
{
$c*=2;
}
$c=8;
&duplica();
print "El resultat és $c";
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl20.pl.
21- Pas de paràmetres a un programa
en perl
a) La llista de paràmetres passat a un
programa en perl es desa dins de la llista @ARGV
b) El
número de
paràmetres passat a un programa en perl es pot trobar creant
una
variable, p.ex ARGC, i fent $ARGC=@ARGV
c) Exemple
#!/usr/bin/perl
my $cadena;
$ARGC=@ARGV;
print "El número de paràmetres
passats ha estat $ARGC\n";
print "Els paràmetres han estat els següents: \n";
foreach $cadena (@ARGV)
{
print "$cadena\n";
}
print "El primer paràmetre ha estat: @ARGV[0]\n";
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl21.pl.
22- Inclusió
d'arxius
És equivalent a la directiva #include del
llenguatge C. Per incloure un fitxer utilitzarem l'ordre require("nom_fitxer.pl");
. Un exemple de la utilització d'aquesta ordre la teniu a la
pràctica 6 d'Ampliació de xarxes. Amb aquesta
ordre podem
accedir a codi existent en un altre programa perl des del nostre
programa.
23- Execucions d'ordres
del shell del sistema operatiu des d'un programa en perl
Execució
d'ordres del shell: system
<ordre_shell>; --> Exemple: system <ls -ls>;
24- Accés a
fitxers
a) Obrir un fitxer per llegir-lo: open (FILE,"nom_fitxer");
//FILE és el "fiile handler", no cal que es digui FILE,
però, ha de ser un nom en majúcula.
b) Obrir un
fitxer per escriure-hi: open
(FILE,">nom_fitxer");
c) Obrir un fitxer per afegir-li nous continguts: open
(FILE,">>nom_fitxer");
d) Detecció d'errors en el moment d'obrir un
fitxer: open
(FILE,"nom_fitxer"); or die "No es pot obrir el fitxer $!";
e) Llegir una línia d'un fitxer: $línia=<FILE>;
f) Llegir tot un fitxer: @línia=<FILE>;
g) Escriure una línia dins d'un fitxer: print FILE
$linia;
h) També podem executar:
print FILE @texte; per
escriure dins d'un fitxer.
i) Tancar
un fitxer: close(FILE);
k) Exemple 1
#!/usr/bin/perl
open(IN, "data.txt");
open(OUT,
">out.txt");
while($linea =
<IN>)
{
# manipula els caràcters
llegits desats dins de $línia.
# $linea. En aquest cas convertim tots
els caràcters a minúscules.
$linea =~ tr/A-Z/a-z/;
# escriptura del resultat
print OUT $linea;
}
close(IN);
close(OUT);
Comprova el seu funcionament, creant un fitxer
amb
aquest codi, de nom perl22.pl.
j)Exemple 2
El següent arxiu visualitza per consola el nom de
cada usuari
del sistema i el seu directori personal. Aquesta informació
s'obté del fitxer /etc/passwd.
#!/usr/bin/perl
my $linia;
my @camps;
open(PASSWD, "/etc/passwd");
while ($linia = <PASSWD>) # Llegeix una
línia del fitxerarchivo
{
chop($linia);
#treiem el canvi de líniaquitamos el
salto de línea
@camps = split(/:/, $linia);
#Creem una llista o array, amb cada paraula de la
línia separada. Per separar paraules, indiquem que el
caracter
separdor és ":"
print " Usuari: @camps[0]. Directori
personal: @camps[5]";
#La primera paraula del fitxer /etc/passwd sempre
és el nom d'usuari, i la sisena és el seu
directori
personal.
}
close(PASSWD);
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl23.pl.
25- Utilitzant atributs
de fitxers
a) Cert si el fitxer existeix:
-e
b) Cert si el fitxer es pot llegir: -r
c) Cert si el fitxer es pot executar: -x
d) Cert si és un fitxer de dades: -f
e) Cert si es un directori: -d
f) Cert si és un enllaç
simbòlic: -l
g) Exemple
#!/usr/bin/perl
my $data;
$data = "data.txt";
if (-e $data)
{
print "El fitxer
$data SI existeix.\n";
}
else
{
print "El fitxer $data NO
existeix.\n";
}
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl24.pl.
26- Treballant amb directoris
a) Obrir
(accedir) a un directori: opendir
(DIR,"nom_directori");
b) Llegir
entrades d'un directori, fitxer a fitxer: $directori=readdir (DIR);
c) Llegir totes les entrades
d'un directori: @directori=readdir
(DIR);
d) Crear un directori: mkdir("nom_directori","màscara");
e) Esborrar un directori:
f) Exemple:
#!/usr/bin/perl
opendir (DIR,".");
@fitxers=readdir(DIR);
closedir (DIR);
foreach $fitxer (@fitxers)
{
if (-f $fitxer)
{
print
$fitxer . "\n";
}
}
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl25.pl.
f) Exemple 2:
#!/usr/bin/perl
my $nom_dir;
my $perm_dir;
print "Indica el nom del directori\n";
$nom_dir=<STDIN>;
chop($nom_dir);
print "Indica els permisos del directori\n";
$perm_dir=<STDIN>;
chop($perm_dir);
mkdir($nom_dir);
chmod oct($perm_dir), $nom_dir;
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl26.pl.
27- Esborrant un fitxer
a) Per esborrar un arxiu utilitzarem l'ordre: unlink("nom_fitxer")
b) Exemple:
#!/usr/bin/perl
my $nom_fitx;
my $nom_dir;
my $nom;
print "Indica el nom del fitxer\n";
$nom_fitx=<STDIN>;
chop($nom_fitx);
print "Indica el nom del directori\n";
$nom_dir=<STDIN>;
chop($nom_dir);
$nom=$nom_dir.'/'.$nom_fitx;
if (unlink($nom)==1)
{
print "El fitxer s'ha esborrat\n";
}
else
{
print "He tingut un problema per esborrar el
fitxer\n";
}
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl27.pl.
28- Esborrant un directori
a) Per esborrar un arxiu utilitzarem l'ordre: rmtree(["nom_fitxer"],1,1)
b) Us caldrà posar al prinicipi del fitxer l'ordre use
File::Path
c) Exemple:
#!/usr/bin/perl
use File::Path;
my $nom_dir;
print "Indica el nom del directori\n";
$nom_dir=<STDIN>;
chop($nom_dir);
rmtree([$nom_dir],1,1);
Comprova el seu funcionament, creant un fitxer amb
aquest codi, de nom perl28.pl.
PRÀCTICA
1-
Utilitza el llenguatge perl per fer una calculadora
que per mitjà d'un menú, et premeti escollir
entre les cinc operacions bàsiques
(*,/,+,-,**) i visualitzar el resultat. L'usuari haurà de passar els dos números com a
paràmetres de l'arxiu de guió. Si el número de
paràmetres és incorrecte haurà d'enviar a pantalla
el missatge "Número de paràmetres incorrecte" i
finalitzar la seva execució. El
nom de l'arxiu de guió
serà perl1p1.pl.
1-
Utilitza el llenguatge perl per fer un arxiu de guió que
visualitzi
per pantalla els números del 5 al 250 i els seus
quadrats.El nom de l'arxiu de guió serà perl2p1.pl.
3-
Utilitza el llenguatge perl per fer un arxiu de guió que comprovi si existeix un
directori, el nom del qual t'ha de demanar durant l'execució del
programa.
Si no existeix el directori, el
programa finalitzarà, donant per pantalla el missatge "El
directori demanat no existeix". Si existeix, em mostrara per pantalla
tots aquells fitxers del directori que siguin fitxers executables per l'usuari que
executa el programa. El
nom de l'arxiu de guió
serà perl1p3.pl.
5- Utilitza el llenguatge perl per
fer un arxiu de guió que mostri per pantalla tots els usuaris
que tinguin un UID més gran o igual que 1000, però menor
que 1200. El nom de l'arxiu de guió
serà perl1p4.pl.
5-
Utilitza el llenguatge perl per fer un arxiu de guió que comprovi si existeix un
directori, el nom del qual has de passar com a segon paràmetre.
Com a primer paràmetre has de
passar una "r" o una "l". Si passes una "r" el programa fara un llistat
de tots els fitxers del directori que tenen permís de lectura
per l'usuari que executa el programa. Si passes una "l" el programa fara
un llistat de tots
els fitxers que siguin enllaços simbòlics a un altre
fitxer. Si no
existeix el directori, el
programa finalitzarà, donant per pantalla el missatge "Nom de
directori incorrecte o el directori
demanat no existeix". Si no passem dos paràmetres, el programa
ha de finalitzar enviant a la pantalla el missatge
"Quantitat de parèmetres incorrecta". Si el segon paràmetre no és
una r o una l, llavors el programa ha de finalitzar enviant a la pantalla el
missatge "Segon paràmetre incorrecte". El
nom de l'arxiu de guió
serà perl1p5.pl.
6- Utilitza el llenguatge perl per
fer un arxiu de guió per
l'usuari root, en el qual se li demanin totes les dades
necessàries per crear un usuari. Un cop donades les dades, el
programa crearà l'usuari. El
nom de l'arxiu de guió
serà perl1p6.pl.
7- Utilitza
el llenguatge perl per fer un arxiu
de guió que utilitzi el mètode de
xifratge ROT-13
per encriptar o desencriptar un texte d'una linia en català que
passem al programa com a segon
paràmetre. El programa ha de visualitzar el resultat per
pantalla de l'encriptació o desencriptació. Com a primer
paràmetre hem passar -e si volem encriptar o -d si volem
desencriptar. Si no passem dos paràmetres, el
programa ha de finalitzar enviant a la pantalla el missatge
"Quantitat de parèmetres incorrecta". Consells:
1- Treballeu amb llistes. 2- Utilitzeu les funcions ord() i chr() de
perl. El nom
de l'arxiu de guió
serà perl1p7.pl.
8- Utilitza el
llenguatge perl per
fer un arxiu de guió a on els programes perl1p1.pl, perl1p2.pl i
perl1p4.pl siguin funcions de perl que són cridades des d'un
menú. El nom de l'arxiu de guió
serà perl1p8.pl.
9- Utilitza el llenguatge perl per
fer un arxiu de guió que et demani el nom d'un fitxer que has de
passar com a 2n paràmetre, i un nom de directori que has de
passar com a 1r paràmetre. Si el fitxer existeix dins del
directori, llavors l'arxiu esborrarà el fitxer. En cas de no
existir, el programa finalitzarà mostrant per pantalla el
missatge "El fitxer no existeix". Si hi ha cap problema per esborrar el
fitxer, el programa
finalitzarà mostrant per pantalla el missatge "El fitxer no s'ha
pogut esborrar". Si no passem dos paràmetres, el
programa
ha de finalitzar enviant a la pantalla el missatge
"Quantitat de parèmetres incorrecta". El nom
de l'arxiu de guió
serà perl1p9.pl.
10- Utilitza el llenguatge perl per
fer un arxiu de guió que esborri
tots els fitxers d'un directori que s'ha de passar com a primer
paràmetre però, no el directori si el segon paràmetre és
-rm. Si el primer
paràmetre és -rd s'esborrarà tot el directori (amb
els fitxer inclosos).
Si no passem dos
paràmetres, el programa
ha de finalitzar enviant a la pantalla el missatge
"Quantitat de parèmetres incorrecta". El nom del script serà perl1p10.pl
11-
S'han de lliurar els arxius de guió comprimits dins d'un arxiu
de nom asi2_dfsi_nom_cognom_perl1.tar.gz que s'han d'enviar
a cf(arrova)collados.org. A
l'assumpte del correu heu de posar asi2_dfsi_nom_cognom_perl1.
L'últim dia per lliurar el treball
és el 14-2-2010. Cada dia que passi d'aquesta data,
treuré dos punts a la nota del treball.