• Publicidad

Llamar subfuncion de un script para utilizarlo en otro

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Llamar subfuncion de un script para utilizarlo en otro

Notapor SistemaJP » 2011-08-17 12:48 @575

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í:

Sintáxis: [ Descargar ] [ Ocultar ]
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. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


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...
SistemaJP
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-08-17 12:30 @562

Publicidad

Re: Llamar subfuncion de un script para utilizarlo en otro

Notapor explorer » 2011-08-17 13:53 @620

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                                 unlink("$file_cws_tmp");
  2.                                 open(SPTTABLE, ">>$file_cws_tmp");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
se puede resumir en:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                                 open(SPTTABLE, ">$file_cws_tmp");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Llamar subfuncion de un script para utilizarlo en otro

Notapor SistemaJP » 2011-08-17 14:12 @633

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í:

Sintáxis: [ Descargar ] [ Ocultar ]
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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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
SistemaJP
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-08-17 12:30 @562

Re: Llamar subfuncion de un script para utilizarlo en otro

Notapor explorer » 2011-08-17 19:00 @833

Yo aún no veo claro algunos pasos, pero mi versión sería así:

Sintáxis: [ Descargar ] [ Ocultar ]
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;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados