No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Perl

22/29
Recursos

Aportes 56

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

wow, nunca había visto nada de código de este lenguaje hasta esta clase, gracias beco!

Si necesitan declarar la equivalencia de string en perl tenemos que usar eq

Ejemplo:

if ($local eq "Venezuela") {
#...
}

uff… da gusto ver a @beco escribiendo código, se ve que es un experto sin duda alguna y sabe enseñar… mostro!

Pero no hay curso de Perl en Platzi. 😥 Jaja

Es genial esto! Aunque no utilice PERL te das cuenta de como puedes aplicarlo para otros lenguajes

Hola
Para ayudarme con los comandos y ejecuciones en Windows uso GIT bash, por si alguien ocupa.

Me encanta de perl este tipo de cosas:

or die

Si ese lenguaje estuviese de moda actualmente, no me quiero imaginar la cantidad de memes.

Para Perl:
Todas las expresiones regulares van entre dos diagonales /miExpresionRegular/

Ejemplos:

  • Cada partido que se hizo en febrero: ^[\d]{4,4}\-02-.*$
  • Cada vez que ganó el visitante: ^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$ -> lo podemos imprimir en Perl como:
if(m/^[\d]{4,4}.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
  if ($4 > $3) {
    printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
      # $1 es el equipo local
      # $2 es el equipo visitante
      # $3 es el marcador del equipo local
      # $4 es el marcador del equipo visitante
  }
  $match++;
}
  • Lo mismo pero ahora añadimos el año del partido: ^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$ -> Lo mostramos así:
if(m/^([\d]{4,4})\-.*?,(.*?),(.*?),(\d+),(\d+),.*$/) {
    if ($5 > $4) {
      printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
      # $1 es la fecha
      # $2 es el equipo local
      # $3 es el equipo visitante
      # $4 es el marcador del equipo local
      # $5 es el marcador del equipo visitante
    }
    $match++;
  }

Esto está genial!!

otra forma de trabajar con expresiones regulares y perl:

$ cat parsea.pl
#!/usr/bin/perl


use warnings;
my $t = time;
$match = 0;
$nomatch = 0;



open (CMD,"./result.csv");


while ($line = <CMD>) {
        if ($line =~ /^(\d+\-\d+\-\d+),(.*),(.*),(\d+),(\d+),(.*),(.*),(.*),(TRUE|FALSE)/) {
                $date=$1;
                $home_team=$2;
                $away_team=$3;
                $home_score=$4;
                $away_score=$5;
                $tournament=$6;
                $city=$7;
                $country=$8;
                $neutral=$9;
                if ($home_score > $away_score) {
                        $year = $date;
                        $year =~ s/(\d+)\-\d+\-\d+/$1/;
                        print "$year - $home_team ($home_score) - $away_team ($away_score)\n";
                }
                #print "*$line";
                $match++;
        } else {
                #print $line;
                $nomatch++;
        }


}

print "se encontraron $match\n";
print "no se encontraron $nomatch\n";
print "tardo:".(time()-$t)."\n";

esta parte es muy interesante:

 $year =~ s/(\d+)\-\d+\-\d+/$1/;

uso una expresion regular para extraer el año

espero les sirva

Primera vez que miro código de perl jaja
un gran ejemplo y medio confuso lo de las variables, aun que en los comentarios vi como se lidia con eso, la rapidez con la que se itera sobre el archivo completo es impresionante

Admirable el trabajo de Beco al mostrar el poder de este lenguaje con las expresiones regulares.

Lo realice sin escapar el dígito inicial como si fuera una clase y obtuve el resultado, creo que no es del todo necesario escaparlo.

<code>
if(m/^\d{4,4}\-02\-.*$/) {

definitivamentes las regex son parte indispansable para nuestro crecimiento pro!!

Desde perl.org pueden buscar indicaciones para descargar Perl en tu sistema operativo. Me sorprendió que Linux y MacOS lo tuvieran instalado por defecto.
Escribiendo perl -v en la terminal de Linux se puede saber qué versión se está usando.

jejejejej

Bien por los galeses

Imprimir todos los partidos de la historia del futbol que han sido jugados en febrero

primera vez que veo PERL y no me disgusta

Definitivamente me quito el sombrero ante este curso. ¡Grande!

Platzi saco un curso de COBOL, así que estaría genial uno de Perl, y puesto a pedir… Porque no uno de REXX… 😂

Perl 🐪 es un excelente lenguaje… De eso no hay duda.

Probe hacer la misma funcionalidad del código en dart.

Perl es muy parecido a C++. Nunca me habit tocado ver Código Perl hasta esta clase xp

Al principio me había parecido aburrido y no le encontraba utilidad a REGEX pero wow, es increíblemente útil

  • Match para expresiones regulares en Perl:
m/regex/
  • Código para obtener partidos jugados en febrero:
#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, "<../regex/results.csv") or die("no hay archivo");

my $match = 0;
my $nomatch = 0;

while(<$f>) {
	chomp; # omite saltos de linea y otros caracteres
	# 2018-06-04,Italy,Netherlands,1,1,Friendly,Turin,Italy,FALSE
    # m --> match 
    # en pearl: /regex/
    if(m/^[\d]{4,4}\-02\-.*$/){
        printf $_."\n";
        $match++;
    } else{
        $nomatch++;
    }

}

close($f);

printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
	, $match, $nomatch, time() - $t);
  • Código para obtener los partidos en los que ganan los visitantes:
#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, "<../regex/results.csv") or die("no hay archivo");

my $match = 0;
my $nomatch = 0;

while(<$f>) {
	chomp;

	if(m/^([\d]{4,4}).*?,(.*?),(.*?),(\d+),(\d+),.*$/){
		if($5 > $4) {
			printf("%s: %s (%d) - (%d) %s\n",
				$1, $2, $4, $5, $3
			);
		}
	    $match++;
	} else {
		$nomatch++;
	}
}

close($f);

printf("Se encontraron \n - %d matches\n - %d no matches\ntardo %d segundos\n"
	, $match, $nomatch, time() - $t);

0 segundos

Increíble, pero se nota la potencia que tiene esta herramienta…

¿Alguien más notó un error de edición del video a partir del minuto 6:59?

2 Segundos 😦

mas que interesanton perl! y sobre todo lo aplicado en este curso con las expresiones regulares!

Qué genial como encuentra todo, Perl tiene un parecido cercano a C.

Es la primera vez que veo el lenguaje.

SUPERFAST

Que maravilla

Increible

No conocia este lenguaje, pero se ve bien interesante para usar

Viendo esta clase se me ocurrieron muchas aplicaciones para mi trabajo. No entendía el poder de las expresiones regulares.

Son excelentes las REGEX

genial

#!/usr/bin/perl

use strict;
use warnings;

my $t = time;

open(my $f, “<./results.csv”) or die (“no hay archivo”);

my $match = 0;
my $nomatch = 0;

while(<$f>) {
chomp;
if(m/^([\d]{4,4})-.?,(.?),(.?),(\d+),(\d+),.$/) {
if($5 > $4) {
printf("%s: %s (%d) - (%d) %s\n", $1, $2, $4, $5, $3);
}
# print $_."\n";
$match++;
} else {
$nomatch++;
}
}

close($f);

printf(“Se encontraron matches: \n - %d matches\n - %d no matches\ntardo %d segundos\n”,
$match, $nomatch, time() - $t );

Busqué cursos de Perl, pero no me arrojó ninguno. ¿Algún motivo? Xb

Ahora quiero aprender Perl 😄

Excelente explicación, se pudo observar el gran potencial de las expresiones regulares sobre todo este conjunto de datos para organizarlos rápidamente.

"Atom se pone loco, me choca"
jajajaj

Cuál sería su expresión regular para tomar todos los partidos de su país?
Y luego capturar: año, país a, país b y resultados. Luego mostrarlo en algún lenguaje, cuántas variables hay? $1, $2, $3 … $10, …?
Mi primer intento:

^(\d{4,4})\-.*?,(((.*[Pp]eru.*),(.*?))|((.*?),(.*[Pp]eru.*))),(\d+),(\d+),.*$

Si Perl no se usa actualmente, el porque los otros lenguajes lo han superado en interactividad, pero si con Perl este tipo de trabajos se hacen el menos de un segundos, me imagino los lenguajes como Python haciendo lo mismo en microsegundos.

No conozco Perl, pero esta clase me despertó curiosidad por aprenderlo

Para trabajar en perl, uso una application open que se llama Cygwin;
Cygwin es un entorno de ejecución y programación para Windows.
Es Unix-Like y se puede instalar muchos paquetes del mundo linux… ahi instale perl, (a veces tambien python, gpp, g++, gcc, imagemagick, wget etc…) y funciona genial.
Pueden echarle un vistazo si gustan.

Me impresiona la potencia que tienen las expresiones regulares con archivos tan grandes.

No conocía Perl pero sin duda es bastante potente

El índice de los conjuntos es ascendente y empieza desde 1, asignados de izquierda a derecha.
Ej.:

^[\d]{4,4}\-.*?,(.*?),(\w.*?),(\d+),.*$

(.?) = $1, (\w.?) = $2, (\d+) = $3

^([\d]{4,4})\-.*?,(.*?),(\w.*?),(\d+),.*$

([\d]{4,4}) = $1, (.?) = $2, (\w.?) = $3, (\d+) = $4

En la última parte le salen 39008 matches porque al agregar la condición deseada no movió la variable que cuenta el # de matches dentro de la misma:

$match++;

Debería ir dentro del if y fuera del mismo el $nomatch:

if($4 > $3) {
	printf("%s (%d) - (%d) %s\n", $1, $3, $4, $2);
	$match++;
}
$nomatch++;

No sé Perl, pero qué bonito se ve escrito xD, de igual manera se entiende bastante la sintaxis porque felizmente antes llevé la introducción a C y luego también a C++:

Insertar meme de: “Do I detect C in this languaje?”

Perl es un lenguaje que hasta la fecha sigue siendo utilizado para fines de scripting, hay que tenerle respeto aunque no lo lleguemos a utilizar.