• Publicidad

Explicación de POO

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Explicación de POO

Notapor Skull118 » 2014-04-23 13:05 @586

Buenas, compañeros y amigos de Perl en Español. Tengo un pequeño problema que podría solucionarlo con POO, sin embargo no me queda claro cómo hacerlo, me he leído un sin fin de tutoriales, pero ninguno me deja claro, qué y cómo debo de hacer este tipo de programación.

Entiendo qué son Clases, Módulos y Atributos. Sin embargo no encontré información muy detallada acerca de cómo se utilizan en Perl. Tal vez pudieran echarme una mano para saber cómo poder hacerlo desde POO.

Mi código busca en una línea de archivo cierta expresión regular, que a decir verdad, funciona bastante bien en programación secuencial, sin embargo deseo pasarla a POO por superación personal y porque deseo aprender cómo funciona.

El código este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3.  
  4. my $a = "nuevo.txt";
  5.  
  6. open( A, $a );
  7. my @L = <A>;
  8.  
  9. my @c = qw(TRANSITO1 TRANSITO2 );
  10. my $m = join '|', @c;
  11.  
  12. my $transito1
  13.     = '(-)' . '(rw)' . '(-)' . '(rw)' . '(-)' . '(r)' . '(-)' . '(-)'
  14.     . '(\\s+)' . '(\\d)'
  15.     . '(\\s+)'
  16.     . '(root)'
  17.     . '(\\s+)'
  18.     . '(dcms)'
  19.     . '(\\s+)'
  20.     . '(\\d+)'
  21.     . '(\\s+)' . '(.)' . '(.)' . '(.)'
  22.     . '(\\s+)' . '(\\d)' . '(\\d)'
  23.     . '(\\s+)' . '(\\d)' . '(\\d)' . '(:)' . '(\\d)' . '(\\d)'
  24.     . '(\\s+)' . '(.)' . '(\\d)' . '(\\d)' . '(\\d)' . '(.)' . '(\\d)' . '(\\d)' . '(\\d)' . '(\\d)' . '(\\d)' . '(\\.)'
  25.     . '(ime$)';
  26.  
  27. my $transito2
  28.     = '(-)' . '(rw)' . '(-)' . '(rw)' . '(-)' . '(r)' . '(-)' . '(-)'
  29.     . '(\\s+)'
  30.     . '(\\d+)'
  31.     . '(\\s+)'
  32.     . '(tasks)'
  33.     . '(\\s+)'
  34.     . '(dcms)'
  35.     . '(\\s+)'
  36.     . '(\\d+)'
  37.     . '(\\s+)'
  38.     . '([a-z])'
  39.     . '([a-z])'
  40.     . '([a-z])'
  41.     . '(\\s+)' . '(\\d)' . '(\\d)'
  42.     . '(\\s+)' . '(\\d)' . '(\\d)' . '(.)' . '(\\d)' . '(\\d)'
  43.     . '(\\s+)'
  44.     . '((?:[a-z][a-z]*[0-9]+[a-z0-9]*))' . '(\\.)' . '(ime)';
  45.  
  46. for ( my $i = 0; $i < @L; $i++ ) {
  47.     my $l = $L[$i];
  48.     $l =~ tr/[a-z]/[A-Z]/;
  49.     $l =~ s/\x20/\x5F/g;
  50.     $l =~ s/\x28|\x29//g;
  51.     if ( ( $l =~ m/^[$m]/is ) && ( $l !~ m/^_|^END|\x2D/ ) ) {
  52.         my $central = $l;
  53.         if ( $central =~ m/***PARAMETRO QUE ENVIÉ***/ ) {
  54.             $i++;
  55.             $l = $L[$i];
  56.             $l =~ tr/[A-Z]/[a-z]/;
  57.             $l =~ s/\x28|\x29//g;
  58.             while ( ( $l !~ m/^\n/ ) && ( $l !~ m/^[$m]/is ) && ( $i < @L ) ) {
  59.                 $l =~ s/\x5F/\x20/g;
  60.                 if ( ( $l !~ m/$gvt/ ) && ( length($l) > 2 ) && ( $l !~ m/^[$m]\n$/ ) ) {
  61.                     $l =~ tr/[a-z]/[A-Z]/;
  62.                     $l =~ s/\n//g;
  63.                     print( B "ERROR EN LA LINEA $l " );
  64.                 }
  65.                 $i++;
  66.                 $l = $L[$i];
  67.                 $l =~ tr/[A-Z]/[a-z]/;
  68.                 $l =~ s/\x20/\x5F/g;
  69.                 $l =~ s/\x28|\x29|\n//g;
  70.             }
  71.         }
  72.     }
  73.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Básicamente lo que necesito es correr este mismo proceso con diferentes parámetros, como son $transito1, $transito2, la línea por dónde va, el array del archivo leído, y la expresión regular, para que me realice el siguiente proceso:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         $l =~ tr/[a-z]/[A-Z]/;
  2.         $l =~ s/\x20/\x5F/g;
  3.         $l =~ s/\x28|\x29//g;
  4.         if ( ( $l =~ m/^[$m]/is ) && ( $l !~ m/^_|^END|\x2D/ ) ) {
  5.             my $central = $l;
  6.             if ( $central =~ m/TRANSITO1/ ) {
  7.                 $i++;
  8.                 $l = $L[$i];
  9.                 $l =~ tr/[A-Z]/[a-z]/;
  10.                 $l =~ s/\x28|\x29//g;
  11.                 while ( ( $l !~ m/^\n/ ) && ( $l !~ m/^[$m]/is ) && ( $i < @L ) ) {
  12.                     $l =~ s/\x5F/\x20/g;
  13.                     if ( ( $l !~ m/**** $transito(X) ****/ ) && ( length($l) > 2 ) && ( $l !~ m/^[$m]\n$/ ) ) {
  14.                         $l =~ tr/[a-z]/[A-Z]/;
  15.                         $l =~ s/\n//g;
  16.                         print( B "ERROR EN LA LINEA $l " );
  17.                     }
  18.                     $i++;
  19.                     $l = $L[$i];
  20.                     $l =~ tr/[A-Z]/[a-z]/;
  21.                     $l =~ s/\x20/\x5F/g;
  22.                     $l =~ s/\x28|\x29|\n//g;
  23.                 }
  24.             }
  25.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De antemano, gracias por el apoyo :D.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Publicidad

Re: Explicación de POO

Notapor explorer » 2014-04-23 22:05 @962

No vas a obtener ventajas al pasar este programa a POO. De hecho, las líneas que muestras serán las mismas.

La documentación de la programación orientada a objetos, la tienes en tu propio ordenador. En la línea de comandos ejecuta el comando perldoc más alguno de los siguientes documentos.
  • perltoot - Tutorial sobre POO (suprimido en las últimas versiones)
  • perltooc - Otro tutorial sobre POO (suprimido en las últimas versiones)
  • perlbot - Tutorial para principiantes sobre los objetos en Perl (suprimido en las últimas versiones)
  • perlboot - Otro tutorial para principiantes sobre los objetos en Perl (suprimido en las últimas versiones)
  • perlobj - Referencia de objetos en Perl
  • perlootut - Manual de programación orientada a objetos en Perl
Éste último recomienda usar el sistema de objetos de la distribución Moose, pero no es el único. Lo que está de acuerdo casi todo el mundo es que es mejor no usar la POO que trae por defecto Perl (razón por la cual han borrado cuatro de los tutoriales). También recomienda otros sistemas POO, según el tamaño de la aplicación que vayas a escribir, como por ejemplo Object::Tiny.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron