Algunas características
# Renombra *.txt a *-2010.txt
$ perl -e 'foreach (<*.txt>)
> { s/\.txt$//; rename("$_.txt", "$_-2010.txt") }'
#!/usr/bin/perl
use strict; # Exige predeclarar las variables (my)
use warnings; # Avisa de posibles errores
#
# Abre el fichero de contraseñas y lee cada línea.
my $filename = "/etc/passwd"; # Nombre del fichero
open(FILE, "<", $filename) # Abre el fichero (solo lectura)
or die "No puedo abrir: $!"; # Termina si falla
while(my $line = <FILE>) { # Lee cada línea
print $line;
}
close(FILE); # Cierra el fichero
$a = "manzanas"; $b = "peras"; print $a." y ".$b."\n"; # Muestra "peras y manzanas" print "$a y $b\n"; # Muestra "peras y manzanas"
@frutas = ("naranjas", "limones", "uvas");
print $frutas[2]; # uvas
($n, $l) = @frutas; # $n="naranjas", $l="limones"
push(@frutas, "cocos"); # $frutas[3] = "cocos"
$c = pop(@frutas); # $c = "cocos"
$nf = scalar(@frutas); # $nf = 3
$fr = "@frutas"; # $fr = "naranjas limones uvas"
@fo = split(/ /, $fr); # @fo = ("naranjas", "limones", "uvas")
%edad_de = {
Eva => 23,
Ana => 19,
Oscar => 41
}
print $edad_de{Ana}; # Imprime 19
$edad_de{Eva}=18; # Cambia un valor
$edad_de{Juan} = 26; # Añade un elemento al mapa
foreach (@frutas) { # Recorre el array
print $_."\n"; # Imprime un elemento por
# línea. El punto concatena
} # dos strings.
print "\nAñade más frutas "; # Imprime un mensaje
$a = <STDIN>; # Lee de la entrada estándar
chop $a; # y elimina el \n
while ( $a ) { # Si la entrada no está vacía
push(@frutas, $a); # añádela al array
$a = <STDIN>; chop $a; # y lee una nueva entrada
}
if ( not $tengo_manzanas ) {
compra(\@frutas,"manzanas" ); # El array se pasa por
} # referencia
Alternativa:
unless ($tengo_manzanas) {
compra(\@frutas,"manzanas");
}
También es válido:
compra(\@frutas,"manzanas") if not $tengo_manzanas;
sub compra {
( $array, $string ) = @_; # Los parametros se recogen
# como escalares
push(@$array, $string); # La referencia se convierte
# a array
}
# Sin argumentos, lee la entrada estandar
while(<>) { # con argumentos, usa estos como nombres
# de ficheros y los lee línea a línea
print if /http:\/\//; # Muestra las líneas con http://
print if s/ttx/txt/ig; # Muestra las líneas con "ttx"
# y hace el cambio por "txt"
# g=global, i=case insensitive
}
$string = "oCme mas futra";
$string =~ s/oCme/Come/; # =~ Aplica sustitución a $string
$string =~ s/futr/frut/;
print $string; # Imprime "Come mas fruta"
#!/usr/bin/perl
use strict;
use warnings;
foreach (glob("*")) { # Recorre los ficheros
my @file = split(/\./); # Los separa por .
my $term = pop(@file); # Extrae el último elemento
print "$term\n";
}
#!/usr/bin/perl
use strict;
use warnings;
unless (scalar(@ARGV) == 1) {
print "Necesito un directorio como argumento\n"; exit 1;
}
if( not -d $ARGV[0] ) {
print "$ARGV[0] no es un directorio\n"; exit 1;
}
# Cambia al directorio
chdir $ARGV[0];
# Recorre los ficheros .xml
foreach my $file (glob "*.xml") {
# Construye el nuevo nombre
my $new = substr($file, 0, -3) . "html";
# Renombra los ficheros
rename $file, $new;
}
#!/usr/bin/perl
use strict;
use warnings;
open(my $fichero, "<", "f.txt")
or die "No puedo abrir f.txt:$!";
my $nl="001"; # Entero de tres dígitos
while(<$fichero>) {
if(!/^$/) { # Sólo las líneas no vacías
print "$nl $_"; # Pon un número de línea
$nl++;
}
else {
print "$_"; # Línea vacía sin número
}
}
use strict; use warnings;
# Módulo para leer parámetros de entrada
use Getopt::Long;
my $addusr = "/usr/sbin/adduser";
my $nombre=""; my $apellido="";
# Obtiene los parámetros
GetOptions("nombre=s" => \$nombre,
"apellido=s" => \$apellido ) or uso();
# Comprueba los parámetros sean correctos
if( not $nombre or not $apellido ) {
uso();
}
if ( $nombre !~ /^[a-zA-Z]+$/) {
uso("El nombre debe ser alfabético");
}
if ( $apellido !~ /^[a-zA-Z]+$/) {
uso("El apellido debe ser alfabético");
}
# Construye el username
my $username = lc( substr($apellido, 0, 1) . $nombre);
# Directorio HOME
my $home = "/home/$username";
# Comando a ejecutar
my $comando = qq($addusr --home $home --disabled-password \\
--gecos "$nombre $apellido" $username);
system $comando; # Ejecuta el comando
# Error e información de uso
sub uso {
my ($msg) = @_; # Recogo los parámetros
if ($msg) { # Si se pasa un mensaje de error,
print "$msg\n\n"; # lo muestra
}
print "Usar: $0 --nombre Nombre --apellido Apellido\n";
exit;
}
Administración de Sistemas e Redes <ASR.USC[at]gmail.com>
Tomás Fernández Pena <tf.pena[at]usc.es>
Última actualización: 30-09-15 17:44 por tomas

Curso de Administración de Sistemas y Redes por Tomás Fernández Pena se distribuye bajo la licencia Creative Commons Recoñecemento-Compartir baixo a mesma licenza. 3.0 España.
Trabajo original en persoal.citius.usc.es/tf.pena/ASR.