Página 1 de 1

Explicación de POO

NotaPublicado: 2014-04-23 13:05 @586
por Skull118
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.006 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.002 segundos, usando GeSHi 1.0.8.4


De antemano, gracias por el apoyo :D.

Re: Explicación de POO

NotaPublicado: 2014-04-23 22:05 @962
por explorer
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.