<?xml version="1.0" encoding="utf8"?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=uft8">
   <META NAME="DATE" CONTENT="11/2/2003">
   <META NAME="Author" CONTENT="J. J. Merelo">
   <META NAME="Description" CONTENT="Tutorial de PERL en castellano, con ejemplos y ejercicios">
   <META NAME="Keywords" CONTENT="curso de perl, tutorial de perl, manual de perl, programacion"> 
   <TITLE>Tutorial de Perl:  Todo bajo control  </TITLE>
<script language="JavaScript">
var contador = 1;
var contadores= new Array;
function multicontador(  numero ) {
      if ( ! contadores[ numero ]  )
          contadores[ numero ] = 1;
      else
          contadores[numero ]++;
      document.write( contadores[numero] );
};

</script>
<link rel ='stylesheet' type = "text/css" href = "perl.css">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#ffffff" LINK="#0000FF" VLINK="#551A8B" ALINK="#FF0000">
<TABLE  align=center cellpadding=5 bgcolor='darkseagreen'>
	<tr>

	<td>
			 <!-- Atomz.com Search HTML for Tutorial de PERL en castellano -->
	  <form method="get" action="http://search.atomz.com/search/">
	    <input size=25 name="sp-q"><br /><input type=submit value="Busca en el tutorial">
	    <input type=hidden name="sp-a" value="0002147b-sp00000001">
	  </form>
	</td>

	<td align='center'>
			<h1><a href='indice.html'>Tutorial de <strong>PERL</strong> en castellano </a>: Todo bajo control</h1>
	</td>

    <td align='right' valign='top'><a href='tutoperl16.html'> Preguntas frecuentemente preguntadas</a><br><a href='tutoperl17.html'> Bibliograf&iacute;a.</a><br><a href='tutoperl18.html'> Recursos Internet</a><br><a href='tutoperl12.html'> Decodificando</a><br><a href='tutoperl14.html'> El cofre de la sabiduría</a><br></td>
	</tr>
</table>

<h3>Usando tuberías para controlar otros programas</h3>



<P>Cuando nuestro pol&iacute;tico corrupto descubre que UNIX tiene ya preprogramadas
muchas de las funciones que le hac&iacute;a el militante de base, lo despide
y decide usar esos programas de UNIX desde, por supuesto, un programa en
<strong>PERL</strong>; además, decide tirar Windows95 a la basura e
instalalarse Linux. Por ejemplo, para contar las palabras que hay en un fichero basta
con usar la orden <code>wc </CODE>de UNIX. Pero si se presenta
en modo bonito, puede salir el siguiente programa, llamado <a href=wc.pl><code>wc.pl</CODE></a><pre><code>
#!/usr/bin/perl
while (&lt;*>) {
    ($zipi, $lineas, $palabras, $bytes, $nombref) = split(/\s+/,`wc $_`);
    print "El fichero $nombref tiene $palabras palabras y $lineas lineas\n";
}
</code></pre>

<P>La primera l&iacute;nea del bucle usa una bonita capacidad de <strong>PERL</strong>,
llamada <I>globbing</I> o generalización. Lo que hace es que, si se pone alg&uacute;n
comod&iacute;n de ficheros del tipo <code>*</CODE> repetir&aacute;
el bucle para cada fichero que cumpla ese patr&oacute;n, asignando el nombre
del fichero a la variable por defecto. Ese nombre se le pasa al comando
wc, usando <code>``</CODE>, es decir, comillas invertidas,
que ejecutan un comando en UNIX devolviendo su salida est&aacute;ndar.
Esa orden completa agarra la salida del comando, del tipo<br>

<code>lineas palabras bytes nombre del fichero</CODE><br>

y la parte en sus componentes. Como las diversas palabras est&aacute;n
separadas por varios espacios o tabuladores, se una el patr&oacute;n <code>\s+</CODE>.
Al principio de la l&iacute;nea hay una serie de espacios, por lo que el
primer componente devuelto no tendr&aacute; nada.
</p>

<P>Hay otra forma diferente de controlar programas en UNIX, esta vez interactivamente,
usando los denominados <em>pipes</em> o <I>tuber&iacute;as</I>,
que se suelen indicar con el car&aacute;cter <code>|. </CODE>Por
ejemplo, la orden <code>open( FICHERO, "|pepe" ),</CODE>
abre una tuber&iacute;a a la orden <code>pepe</CODE>, que
a partir de entonces ejecutar&aacute; los comandos que reciba del programa
en <strong>PERL</strong>, ya que &eacute;ste programa le suministrar&aacute; la entrada
est&aacute;ndar. Esto se puede usar de la siguiente forma (si se dispone
del programa <code>gnuplot</CODE>):<pre>
open( GNU, "|gnuplot" );
print "Fichero a trazar? "; chop($fileN = &lt;STDIN>);
print GNU "plot \"$fileN\" with lines 1\n";
</pre><p>que
abrir&aacute; una <I>tuber&iacute;a </I>al programa y le enviar&aacute;
la orden para trazar un fichero con l&iacute;neas. Con este tipo de &oacute;rdenes
y con <code>gnuplot</CODE>, y con unas pocas ganas, se pueden
hacer animaciones. Sin embargo, hay que tener en cuenta que s&oacute;lo
se podr&aacute; hacer con programas que acepten comandos por su entrada
est&aacute;ndar.
</p>




<TABLE  align=center cellpadding=5 bgcolor='darkseagreen'><tr><td>[<a href='tutoperl16.html'> Preguntas frecuentemente preguntadas</a>] [<a href='tutoperl17.html'> Bibliograf&iacute;a.</a>] [<a href='tutoperl18.html'> Recursos Internet</a>] [<a href='tutoperl12.html'> Decodificando</a>] [<a href='tutoperl14.html'> El cofre de la sabiduría</a>] </td></tr></table>

</BODY>
</HTML>
