CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas...

39
so 7508 1 PERL CLASE 2

Transcript of CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas...

Page 1: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 1

PERL

CLASE 2

Page 2: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 2

PERLRepaso clase anterior:

Ejemplo#!/bin/perlprint "Hola Mundo\n"; # Imprime Hola MundoTipos de datos

Escalares $x=0.897;$var=”Hola”;Arreglos @mezcla=("hola",23,"adios", 31.234);Hash %cuota=("root",1000,"Juan",256,"Jose",4000);

Como se referencia cada tipo de datosprint $var # Variable escalarprint $mezcla[0] # Elemento de un arrayprint $cuota{root} # Elemento de un hash

Page 3: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 3

PERLRepaso clase anterior:

Estructuras de Control

if (expresión) { instrucción o bloque de intrucciones 1;}[else { instrucción o bloque de instrucciones 2;}

While/until (expresión) {instrucción o bloque de instrucciones; }

for (inicial_exp; test_exp; incremento_exp) { instrucción o bloque de intrucciones;}

foreach $variable (@lista) { instrucción o bloque de instrucciones;}

Page 4: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 4

PERL

Repaso clase anterior:

# Ej1#!/usr/local/bin/perl$value = 0;while ($value++ <= 5) { print("\$value ahora $value\n");}

Page 5: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 5

PERLRepaso clase anterior:Ej Post

$value en el test Resultado $value despues del test

0 true (0 <= 5) 1

1 true (1 <= 5) 2

2 true (2 <= 5) 3

3 true (3 <= 5) 4

4 true (4 <= 5) 5

5 true (5 <= 5) 6

6 false (6 <= 5) 7 (exit while)

Page 6: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 6

PERLEjercicio, concatenar los textos ingresados por STDIN:

# Ej3#!/usr/bin/perl$resultstring = "";print("Ingrese el texto - (linea en blanco para salir)\n");$input = <STDIN>;chop ($input);while ($input ne "") { $resultstring .= $input; $input = <STDIN>; chop ($input);}print ("Cadena final:\n");print ("$resultstring\n");

Page 7: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 7

PERLRepaso clase anterior:

#!/usr/bin/perl@list = (1, 2, 3, 4, 5);foreach $temp (@list) { if ($temp == 2) { $temp = 20; }}

Despues

@list=(1,20,3,4,5)

Page 8: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 8

PERLEntradas y Salidas

Para leer de teclado se utiliza <STDIN>, que es un manejador de ficheros (Filehandle), que por costumbre se ponen en mayúsculas.

También existe <STDOUT> y <STDERR> para la sálida estándar y la sálida de errores respectivamente.

Lectura de STDIN:#!/usr/bin/perlprint "Hola. ¿Cómo te llamas?\n";$nombre=<STDIN>;chop($nombre);if ($nombre eq ""){print 'Ingresa tu nombre'."\n";}

else{print "Hola $nombre!\n";};

Page 9: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 9

PERL

Entradas y Salidas

En el ejemplo anterior el script de Perl espera a que el usuario pulse Return (retorno de carro), es decir, lee una línea ($nombre=<STDIN>).

Si en lugar de una variable escalar hubiera utilizado un array, el script hubiese guardado también los retornos de carro hasta que se hubiese pulsado CTRL+D (@vector=<STDIN>).

Para escribir en la salida estándar se utiliza print como hemos visto, pero si queremos escribir en la salida de errores sería poniendo después de print el manejador de fichero de donde queremos escribir.

Page 10: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 10

PERLEntradas y Salidas

Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.Para abrir un fichero se utiliza la función open y para cerrarlo con close.El formato para abrir un fichero es :

open (Manejador_de_fichero, Modo_y_NombreFichero).

Lo modos de abrir un fichero se muestran en la siguiente tabla.

Archivo Abre Archivo para lectura<Archivo Abre Archivo para lectura>Archivo Abre Archivo para estritura, lo crea si no exixte>>Archivo Abre Archivo para appendear+>Archivo Abre Archivo para Lectura Escritura

Page 11: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 11

PERLEntradas y Salidas

Ejemplo:#!/usr/bin/perl$entrada="entrada.txt";$salida ="salida.txt";open (ENTRADA,"<$entrada") || die "ERROR: No puedo abrir el fichero $entrada\n";open (SALIDA,">$salida") || die "ERROR: No puedo abrir el fichero $salida\n";while ($linea=<ENTRADA>){print SALIDA $linea;}close (ENTRADA);close (SALIDA);

Page 12: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 12

PERLEjemplo:

#!/usr/bin/perl$ar=$ARGV[0];$str=$ARGV[1];open(AR,"gunzip -c $ar |") || die "No se puede abrir el archivo $ar $!\n";open(SAL,"| grep $str ") || die "No se puede abrir el archivo $ar $!\n";@indice=<AR>;close(AR);foreach $f (@indice) {print SAL $f ;}close(SAL);

Page 13: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 13

PERLLectura de directorios

opendir(manejador,directorio) (Devuelve verdadero si puede abrir el directorio)

readdir(manejador) (Dependiendo del contexto devuelve una lista o el siguiente archivo).

closedir(manejador) (Devuelve verdadero si puede abrir el directorio)

Page 14: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 14

PERLLectura de directorios

Ejemplos#!/usr/bin/perl$dir=$ARGV[0];if (opendir(DIRH,"$dir")){@flist=readdir(DIRH);closedir(DIRH);}foreach (@flist){# ignorar . y .. :next if ($_ eq "." || $_ eq "..");if ( -x "$dir/$_" ){print "$dir/$_\n";}}

Page 15: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 15

PERLLectura de directorios

Ejemplos#!/usr/bin/perl $dirname = "./";opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";while( $filename = readdir(DIR)){

if (-r $filename){

print("Tiene permiso de lectura $filename\n");}

}closedir(DIR);

Page 16: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 16

PERL

File Test Operator

Operator Description-d Is name a directory?-f Is name an ordinary file?-l Is name a symbolic link?-o Is name owned by the user?-r Is name a readable file?-w Is name a writable file?-x Is name an executable file?-z Is name an empty file?

Page 17: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 17

PERLOperador diamante

Este operador toma diferentes comportamientos según el contexto.

- Pasandole un manejadorwhile ($linea=<ENTRADA>)# Lee los registros del manejador ENTRADA{print SALIDA $linea;}

- Pasandole un * while ( <*> ){print "$_\n";} # Devuelve nombres de archivos del directoriowhile ( <*.pl> ){print "$_\n";} # Devuelve nombres de archivos con extension pl.

Page 18: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 18

PERL

Operador diamante

- Sin parametroEl operador diamante tratará de leer @ARGV si no tiene elementos lee de la entrada standard.

While ( <> )# Lee de entrada standard{print "$_\n";} # Espera de entrada standard y la imprime.

While ( <> )# Lee de @ARGV{print "$_\n";} sript.pl arch1 arch2 arch3# Muestra por salida las lineas de arch1, arch2 y arch3

Page 19: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 19

PERLOperador diamante

- Asignando a un arreglo@arreglo =<*> ; for ($i=0;$i<=$#arreglo;$i++){print "$arreglo[$i] \n";} # Recorre archivos del directorio.

open(MYFILE,”<pgm.pl”) || die “Error”;@array = <MYFILE>;# Asigna al arreglo todos los registros del archivo.foreach (@array){$i=index($_,"print",1); # busca el string “print”if ($i > 0){

print "$_\n"; };}

Page 20: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 20

PERLComo obtener la hora del sistema

localtimeContexto arrayDevuelve los siguientes elementos:-Segundos-Minutos-Hora-Día -Mes (0-11)-Año desde 1900-Día de la semana (Domingo = 0)-Numero de día del año desde 0.-Verdadero en el caso de que la fecha esté dentro del horario de verano

Page 21: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 21

PERL

Como obtener la hora del sistemaEjemplo:($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;$year+=1900;$mon++;print "anio=$year\nmes=$mon \ndia=$mday\nhora=$hour \nmin=$min \nsegundos= $sec \n";print "$mday/$mon/$year $hour:$min:$sec \n";

SALIDA:anio=2011mes=10 dia=3hora=11 min=30 segundos=30 3/10/2011 11:30:30

Page 22: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 22

PERL

Como obtener la hora del sistema

Contexto escalar$fecha=localtime;Print $fecha.”\n”;

SALIDASat Apr 7 19:49:46 2012

Como obtener usuarioLa función getlogin devuelve el user ID del usuario que esta logueado.

$logname = getlogin();print "El usuario es $logname \n";

Page 23: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 23

PERLLlamadas al sistema operativoPara pedir al sistema operativo que ejecute otros programas desde un programa en Perl podemos hacerlo de varias maneras. Al hacerlo estamos en realidad llamando al sistema operativo y esperando su respuesta:

Ejemplos:$resultado=`ls -l *.sh`;# muestra todos los archivos .sh del directorio actual.$resultado = `df -k`; # muestra el espacio libre en los sistemas de ficheros de tu sistema,$resultado = `cat archivo.pdb | grep ATOM`; # imprime las líneas 'ATOM' de un PDB

$resultado = system("cat archivo.pdb | grep ATOM");$resultado = system("pwd"); # directorio actual

Page 24: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 24

PERLSPLIT

La funcion split() divide una cadena de acuerdo a un patrón pasado como parámetro.

split(PATRÓN,CADENA);

Ejemplo$informacion = "Juan,Gomez,29";@data = split(",", $informacion);($nombre,$apellido,$edad) = split(",", $informacion);print "$nombre $edad $apellido \n";print $data[1] . "\n";

Page 25: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 25

PERLJOIN

La funcion join() permite unir diferentes partes en una sola, introduciendo un separador entre ellas, es decir, hace lo contrario de split.

join(STRING,LISTA);

Ejemplopush (@numeros,$i) while ($i++ <= 10);$cadena=join(",",@numeros);

$cadena=join("\n",@numeros);print $cadena . "\n";

Page 26: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 26

PERLExpresiones regulares

Las expresiones regurales son caracteres especiales que juntos o por separado actúan como patrones de búsqueda, comparación o sustitución en una cadena. Estas expresiones se colocan entre 2 barras (/expr/).

Caracteres especiales. cualquier carácter excepto \n^ Inicio de la linea$ fin de la lineaa* es una a cero o más veces.a+ es una a una o más veces.a? es una a una o ninguna veces.a{n} es una a n veces.a{n,} es una a n o más veces.a{n,m}es una a entre n y m veces, incluidos ambos valores.

Page 27: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 27

PERLExpresiones regulares

Caracteres especiales

\d es equivalente a [0-9].\s es equivalente a [\ \t\r\n\f] (espacio, tabulador y retornos de carro).\w es equivalente a [0-9a-zA-Z_].\D es el negado de \d; Representa cualquier caracter que no sea un digito [^0-9].\S es el negado de \s; Represnta cualquier cosa que no sea un espacio en blanco [^\s].\W es el negado de \w; Representa cualquier cosa que no sean cifras, letras o _ [^\w].\n newline.

Page 28: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 28

PERLExpresiones regulares

Expresiones regulares de comparación.

valor a comparar =~ patrón de búsqueda if ($linea =~ /html/) { print $linea; }

$string = "Mi frase no es muy larga";if($string =~ /frase/){print "Se encontró la palabra: frase.\n";}$string = "Mi frase no es muy larga";if($string !~ /jugo/){print "No se encontró la palabra: jugo.\n";}

Page 29: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 29

PERLExpresiones regulares

Expresiones regulares de comparación.

Ejemplos$cadena="Hola Mundo";

($cadena =~ /^Hola/) # que comience con Hola($cadena =~ /Mundo$/)# que termine con Mundo($cadena =~ /M*/) # que contenga 0 o mas M($cadena =~ /M?ndo/) # que contenga la cadena ndo

Page 30: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 30

PERLExpresiones regulares

Expresiones regulares de sustitución.

variable =~ s/patrón búsqueda/patrón sustitución/opciones $string = "Hoy es Lunes";$string =~ s/Lunes/Martes/;print $string ."\n"

$var="Hola Mundo";$var=~ s/o/a/g;print $var; # Imprime Hala Munda

$var=~ s/\s/-/g;print $var; # Imprime Hala-Munda

Page 31: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 31

PERLVariables especiales$_ Contiene el contenido del último registro leído. $0 Contiene el nombre del script perl.$$ Contiene el PID dscript perl.$. Contiene el número de la última línea leída.$/ Separador de campo para la entrada.$[ Contiene el valor del primer índice de una array (0)$] Contiene la version de perl ("perl -v").$< Uid real del proceso actual.$@ Contiene el mensaje de error de sintaxis de perl del último comando evaluado.$( Gid real del proceso actual.@ARGV Contiene los parámetros pasados a nuestro script %ENV: Array asociativo que contiene las variables de entorno bajo el que se ejecuta nuestro script Perl.(ej.$ENV{HOME})

Page 32: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 32

PERLEjemplos

#! /usr/bin/perl # localiza un programa que va a ejecutar

die "Uso: cual programa\n" if ($#ARGV < 0);$programa= $ARGV[0];@lpath= split(/:/, $ENV{PATH});

foreach $dir (@lpath) { next if ($dir =~ /^\.+$/); if (-x "$dir/$programa") { print "$dir/$programa\n"; }}

Page 33: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 33

PERLEjemplos

#! /usr/bin/perl # Busca archivos de tipo .pdf y muestra su tamaño

opendir(DIR,$ARGV[0]) || die "No se puede abrir el directorio \n";@indice= readdir(DIR) ;closedir(DIR);

foreach $f (@indice) { next unless ( $f =~ /\.pdf$/ ); system("wc $f"); `wc $f `;}

Page 34: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 34

PERLVer Ejemplo

EjHash1.plEjHash2.plEjVector.plEjClase2_part5.pl

Page 35: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 35

PERLEjemplos

print "Ingrese el hash \n";$hash=<STDIN>;chop($hash);@keys = keys (%$hash);@values = values (%$hash);print $keys[0];print $keys[1];print $keys[2];print $keys[3];print $keys[4];#while ($#keys >= 0) { print pop(@keys), '=', pop(@values), "\n";}#print "# Otra forma de recorrer un hash \n";while (($clave,$valor) = each %hash){ print "$clave \t==> $valor \n"; }## Funcion mapprint map "$_ = $hash{$_}\n", keys %hash;@p = map $_ ** 2, (1..10);

Page 36: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 36

PERLEjemplos

print "Ingresar clave del hash a validar \n";$clave=<STDIN>;chop($clave);if ( exists($hash{$clave} )) {print "La clave $clave existe en el hash \n"}else {print "La clave $clave NO existe en el hash \n"};#print "Se borra la clave ingresada\n";delete($hash{$clave} );if ( exists($hash{$clave} )) {print "La clave $clave NO ha sido borrada\n"}else {print "La clave $clave ha sido borrada\n"};#

Page 37: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 37

PERLEjemplos#!/usr/bin/perl$searchword = $ARGV[0];print ("Palabra a buscar: $searchword\n");shift (@ARGV);$totalwordcount = $wordcount = 0;$filename = $ARGV[0];print ("Nombre de archivo: $filename\n");while ($line = <>) { chop ($line); @words = split(/ /, $line); $w = 1; while ($w <= @words) { if ($words[$w-1] eq $searchword) { $wordcount += 1; } $w++; } if (eof) { print ("Ocurrencias en el archivo $filename: "); print ("$wordcount\n"); $totalwordcount += $wordcount; $wordcount = 0;$filename = $ARGV[0]; }}print ("Total de ocurrencias: $totalwordcount\n")

Page 38: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 38

PERLEjercicio

Tenemos un archivo con facturas de las diferentes sucursales con el siguiente formato

Archivo Facturas:nro de factura, fecha,sucursal, importe

Utilizando hashes imprimir total facturado por sucursal

Page 39: CLASE 2materias.fi.uba.ar/7508/Practica-2015/PERL_Clase_2.pdf · so 7508 10 PERL Entradas y Salidas Para trabajar con un archivo hay que abrirlo, escribir/leer de él y cerrarlo.

so 7508 39

PERLopen (ENT,"<facturas.txt") || die "ERROR: No puedo abrir el fichero facturas\n";open (SAL,">sucursales.txt")|| die "ERROR: No puedo abrir el fichero sucursales\n";while (<ENT>) {chomp($_);@reg=split(”,”,$_);$suc{$reg[2]}+=$reg[3];}open (SAL,">sucursales.txt");foreach (keys(%suc)){print SAL $_.",".$suc{$_} ."\n";};close (SAL);close (ENT);