Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Llamar subfuncion de un script para utilizarlo en otro Responder al tema
Nuevo tema


Página 1 de 1  [ 4 mensajes ] 
 
Nota 2011-08-17 12:48 @575

Perlero Nuevo
Registrado: 2011-08-17 12:30 @562
Mensajes: 5
Llamar subfuncion de un script para utilizarlo en otro
Hola soy nuevo aquí. Espero estén muy bien y me puedan ayudar, bueno al punto.

Tengo una función llamada &table_split(); dentro de un script llamado test1.pl

La función va así:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. sub table_split
  2. {
  3.         print "Esta squi-..\n";
  4.         my $receive_fptbl= $_[0];
  5.         if($receive_fptbl eq 1)
  6.         {
  7.                 my $name_cws= $_[1];
  8.                 open (SPFILE,"$name_cws");
  9.                 $. = 0;
  10.                 while (<SPFILE>)
  11.                 {
  12.                         chomp($str_spfile = $_);
  13.                         print SPTTABLE "$str_spfile\n";
  14.                         if($str_spfile =~ /^\s*\D+\s*\#\s*\w+\d+\s*/)
  15.                         {
  16.                                 chomp($Tname=$str_spfile);
  17.                                 $Tname =~ s/\s*\D+\s*\#\s//;
  18.                                 push(@table,$Tname);
  19.                                 close(SPTTABLE);
  20.                                 $file_cws_tmp = "$Tname.cws.temp";
  21.                                 unlink("$file_cws_tmp");
  22.                                 open(SPTTABLE, ">>$file_cws_tmp");
  23.                                 print SPTTABLE "C \# $Tname\n";
  24.                         }
  25.                         $str_spfile =~ s/(\d)\s+(\d)/$1,$2/g;   #print"$str_line\n";
  26.                         push(@table,$str_spfile);
  27.                 }
  28.                 close(SPFILE);
  29.         }
  30. }


Y la quiero llamar desde test2.pl pasando estos parámetros:

($bool_call1, $file) (1, file.txt)

He intentado con require sin ningún éxito, espero me puedan ayudar...


Nota 2011-08-17 13:53 @620
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Llamar subfuncion de un script para utilizarlo en otro
Bienvenido a los foros de Perl en español, SistemaJP.

Mira este hilo. Con la ayuda de do() puedes importar código Perl dentro de tu programa.

Pasar parámetros a un package

Aparte de eso, me gustaría ver algún ejemplo del fichero que estás tratando en la función table_split(), ya que, según veo, algunas cosas se pueden simplificar.

Por ejemplo:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.                                 unlink("$file_cws_tmp");
  2.                                 open(SPTTABLE, ">>$file_cws_tmp");
se puede resumir en:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.                                 open(SPTTABLE, ">$file_cws_tmp");

_________________
JF^D Perl programming


Nota 2011-08-17 14:12 @633

Perlero Nuevo
Registrado: 2011-08-17 12:30 @562
Mensajes: 5
Re: Llamar subfuncion de un script para utilizarlo en otro
Muchas gracias, explorer, he leído lo que me recomendaste y creo que me funcionará, aún no lo he implementado, estoy un poco corto de tiempo y decidí usar el system() para mandar llamar el script junto con un argumento que me lleva directo a la función.

En cuanto a mi lectura de archivos está así:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. while (<SPFILE>)
  2.         {
  3.                 chomp($str_spfile = $_);
  4.                
  5.                 #print"$str_spfile\n"; 
  6.                 print SPTTABLE "$str_spfile\n";
  7.                 if($str_spfile =~ /^\s*\D+\s*\#\s*\w+\d+\s*/)
  8.                 {
  9.                        
  10.                         chomp($Tname=$str_spfile);
  11.                         $Tname =~ s/\s*\D+\s*\#\s//;
  12.                         chomp($tname_file=$Tname);
  13.                         $tname_file =~ tr/A-Z/a-z/;
  14.                         #print "\nNEW---->$Tname\n";
  15.                         push(@table,$Tname);
  16.                         close(SPTTABLE);
  17.                         $file_tmp = "$path_log/$tname_file.temp";
  18.                         unlink("$file_cws_tmp");
  19.                         open(SPTTABLE, ">>$file_tmp");
  20.                         print SPTTABLE "C \# $Tname\n";
  21.                        
  22.                 }
  23.                 $str_spfile =~ s/(\d)\s+(\d)/$1,$2/g;   #print"$str_line\n";
  24.                 push(@table,$str_spfile);
  25.         }
  26.         close(SPFILE);


El unlink() está porque tengo este tipo de archivos.

test.txt:
C # PWC098
Datos muchos datos
C # AXC128
Datos muchos datos
C # RTC094
Datos muchos datos
C # ASQ020

Entonces divido cada vez que encuentre mi expresión en un archivo nuevo y como las ejecuciones deben de ser actualizaciones...

Espera...

Tienes razón, de esa manera ya no debería de utilizar el unlink(), buen punto, gracias, explorer.

Lo que pasa es que llevo aproximadamente un mes con Perl y aun me fallan algunas cosas... =P


Nota 2011-08-17 19:00 @833
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Llamar subfuncion de un script para utilizarlo en otro
Yo aún no veo claro algunos pasos, pero mi versión sería así:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $SPTTABLE;
  2.  
  3. while (my $str_spfile = <SPFILE>) {
  4.  
  5.     if ( $str_spfile =~ /^\w+ # (\w+)/ ) {      # C # PWC098
  6.  
  7.         $Tname = $1;
  8.         push @table, $Tname;
  9.  
  10.         close $SPTTABLE if $SPTTABLE;
  11.  
  12.         my $file_tmp = "$path_log/" . lc($Tname) . '.temp';
  13.  
  14.         open  $SPTTABLE, q[>], $file_tmp;
  15.         print $SPTTABLE "C # $Tname\n";
  16.  
  17.         next;
  18.     }
  19.     else {
  20.         print $SPTTABLE $str_spfile;
  21.     }
  22.  
  23.     chomp $str_spfile;
  24.     $str_spfile =~ s/(\d)\s+(\d)/$1,$2/g;    #print"$str_line\n";
  25.  
  26.     push @table, $str_spfile;
  27. }
  28.  
  29. close SPFILE;
  30. close $SPTTABLE if $SPTTABLE;

Seguro que la segunda parte está mal, pero es porque no está explicado qué es lo que se quiere hacer. Es lo que pasa con la técnica de "programar a ciegas" ;)

_________________
JF^D Perl programming


Responder al tema  [ 4 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO