jueves, 17 de abril de 2025

Programando en Perl no. 7

Perl (Practical Extraction and Report Language) es uno de esos lenguajes que a todos llaman la atención, pero a muy pocos lo suficiente para adentrarse más en el.

Se dice que es mejor que Python, que Ruby.

Quienes lo han usado en su entorno laboral mencionan que es más útil que AWK para la manipulación de archivos. Mejor que un simple Shell (bash shell) para efectuar tareas relacionadas a la administración de sistemas.

Y que decir de los advenedizos como Powershell. Perl se considera como ese viejo confiable. Seguro y eficiente, pero pasado de moda, muy pasado de moda.

¿Para qué usarlo?

Simple, porque lo hecho en Perl, a pesar de los años, no deja de funcionar.

Quizás, en un futuro no muy lejano, lo usarás para el tratamiento y generación de ficheros de texto que con otros lenguajes te llevaría más tiempo. O es probable que tengas que administrar sistemas y muchos de los scripts que hay que darles mantenimiento sean escritos en Perl o deban ser trasladados a ese lenguaje.

Ahora seguiremos con los ejemplos.

Ejemplo 1. Crear un programa que ordene de manera alfabética el contenido de un archivo. El archivo contiene los siguientes datos:

archivo.txt

1
2
3
4
5
6
7
8
manzana
guayaba
uva
pera
arandano
platano
naranja
durazno

ordenar.pl

use strict;

print "\t Ordenar el contenido de un archivo \n";
open ( my $archivo, "<", "archivo.txt" ) or die $!;
my @lineas = <$archivo>;
print sort @lineas;


exit;

Ejecutar:

$ perl ordenar.pl

Salida:

         Programando en Perl
arandano
durazno
guayaba
manzana
naranja
pera
platano
uva

Ejemplo 2. Calcular el IMC de una persona. El programa deberá tener una función de calcule el IMC. Los datos de entrada serán el peso y talla de una persona.

imc.pl

use strict;
use warnings;

# Función para el cálculo de IMC
sub calc_imc(){
    print "\t [  Calcular el IMC  de una persona ]\n";
    print "Tu peso: ";
    chomp(my $peso=<STDIN>);
    print "Tu estatura: ";
    chomp(my $talla=<STDIN>);
    my $imc = &get_imc($peso,$talla);
    print "Un peso de: $peso y una talla de $talla da como resultado un IMC de: $imc\n";
    
}

# Función 'main' del programa.
sub main{
  calc_imc();
}

main();

Ejecutar:

$ perl imc.pl

Salida:

         [  Calcular el IMC  de una persona ]
Tu peso: 45
Tu estatura: 1.55
Un peso de: 45 y una talla de 1.55 da como resultado un IMC de: 18.7304890738814

Ejemplo 3. Crear un script que verifique si un host está caído.

verifica.pl

#!/usr/bin/perl
use strict;
use warnings;

# Solicitar al usuario el host a verificar
print "Ingresa el hostname o dirección IP a verificar (ejemplo: google.com o 8.8.8.8): ";
my $host = <STDIN>;
chomp($host);

# Validar que el host no esté vacío
if (!$host) {
    die "Error: Debes ingresar un hostname o dirección IP válido.\n";
}

# Determinar el comando ping según el sistema operativo
my $ping_cmd;
if ($^O =~ /Win32/i) {
    # Windows: usar -n 4 para 4 intentos
    $ping_cmd = "ping -n 4 $host";
} else {
    # Unix/Linux: usar -c 4 para 4 intentos
    $ping_cmd = "ping -c 4 $host";
}

# Ejecutar el comando ping y capturar el resultado
my $output = `$ping_cmd 2>&1`;
my $exit_code = $?;

# Verificar el resultado del ping
if ($exit_code == 0) {
    print "El host $host está ACTIVO (responde al ping).\n";
} else {
    print "El host $host está CAÍDO o no responde al ping.\n";
    print "Detalles del error:\n$output\n";
}

exit 0;

Ejecución:

$ perl verifica.pl

Salida:

Ingresa el hostname o direcci├│n IP a verificar (ejemplo: google.com o 8.8.8.8): facebook.com
El host facebook.com está ACTIVO (responde al ping).

CPAN

CPAN (Comprehensive Perl Archive Network) es el repositorio principal para módulos y bibliotecas de Perl, y la herramienta cpan es el cliente oficial para interactuar con él. Algo similar a lo que es Maven de Java.

¿Para qué sirve? Nos sirve para:

  • Para instalar, buscar, actualizar y gestionar módulos de Perl.
  • Para ahorrarnos la vida programando algo que alguien más ya hizo.

Para instalar un módulo podemos:

Entrar al Shell:

>cpan
Loading internal logger. Log::Log4perl recommended for better logging

Starting with version 2.29 of the cpan shell, a new download mechanism
is the default which exclusively uses cpan.org as the host to download
from. The configuration variable pushy_https can be used to (de)select
the new mechanism. Please read more about it and make your choice
between the old and the new mechanism by running

    o conf init pushy_https

Once you have done that and stored the config variable this dialog
will disappear.
Unable to get Terminal Size. The Win32 GetConsoleScreenBufferInfo call didn't work. The COLUMNS and LINES environment variables didn't work. at C:\Strawberry\perl\vendor\lib/Term/ReadLine/readline.pm line 410.

cpan shell -- CPAN exploration and modules installation (v2.36)
Enter 'h' for help.

cpan> install Module::Name

O sin la necesidad de entrar al Shell:

cpan install Module::Name

Donde:

  • Module es el módulo.
  • Name el nombre de la función.

Comandos básicos

Instalar módulos (sin entrar al Shell):

$ cpan install Net::Ping

Buscar módulos (entrando al Shell):

cpan> m /Ping/

Listar módulos:

cpan> i

Listar módulo en específico:

cpan> i Net::Ping

Actualizar módulos:

cpan> upgrade

Actualizar módulos sin entrar al Shell:

cpan upgrade

Actualizar módulo en específico:

$ cpan install Net::Ping

Actualizar el propio CPAN:

cpan> install CPAN

Ver información de los módulos, en este caso de Net::Ping

cpan> d Net::Ping

Probar un módulo sin instalar:

cpan> test Net::Ping

Forzar la instalación de un módulo:

cpan> force install Net::Ping

Salir de CPAN:

cpan> quit

También es útil ver la onfiguración de CPAN:

cpan> o conf

Cambiar la configuración:

cpan> o conf urllist push http://mirror.cpan.org/

Una vez instalado el módulo Net::Ping podríamos modificar el programa que verifica si un host esta caído.

verificawithping.pl

#!/usr/bin/perl
use strict;
use warnings;
use Net::Ping;

# Solicitar al usuario el host a verificar
print "Ingresa el hostname o dirección IP a verificar (ejemplo: google.com o 8.8.8.8): ";
my $host = <STDIN>;
chomp($host);

# Validar que el host no esté vacío
if (!$host) {
    die "Error: Debes ingresar un hostname o dirección IP válido.\n";
}

# Crear objeto Net::Ping
my $p = Net::Ping->new("icmp");

# Verificar si el host responde
if ($p->ping($host, 2)) {  # 2 segundos de tiempo de espera
    print "El host $host está ACTIVO (responde al ping).\n";
} else {
    print "El host $host está CAÍDO o no responde al ping.\n";
}

# Cerrar el objeto
$p->close();

exit 0;

Conclusión

Perl es un lenguaje con una curva de aprendizaje relativamente sencillo y con una amplia comunidad. Además cuenta con una considerable cantidad de librerías y framework que lo apoyan. Sin embargo, en la actualidad con el surguimiento de "nuevos" lenguajes de programación como Golang o Rust su futuro no estan promovedor.

Perl es útil para sistemas heredados, sistemas que requieren ciertos ajustes, actualizaciones o mantenimiento. Quienes tengan que hacer ese trabajo, deberán aprenderlo.

Para quienes no, es mejor vislumbrar otras alternativas (como Python).

Aquí seguiremos hablando sobre este lenguaje para quienes lo necesiten.

Enlaces:

https://www.perl.org/
Empresas que usan Perl
¿Por qué y para qué usar Perl?

No hay comentarios:

Publicar un comentario

Composer, un administrador de dependencias para PHP

Composer es un administrador de dependencias para PHP que rastrea las dependencias locales de sus proyectos y bibliotecas. Para ...

Etiquetas

Archivo del blog