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 } # referenciaAlternativa:
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.