La advertencia en Perl es el Pragma más comúnmente utilizado en la programación de Perl y se usa para detectar ‘código no seguro’. Un pragma es un módulo específico en el paquete de Perl que tiene el control sobre algunas funciones del tiempo de compilación o el comportamiento del tiempo de ejecución de Perl, que es estricto o advierte. Así que la primera línea dice así,
use warnings;
Cuando se usa el pragma de advertencia, el compilador verificará si hay errores, emitirá advertencias contra el código y no permitirá ciertas construcciones y técnicas de programación. Este pragma envía una advertencia cada vez que se produce un posible error tipográfico y busca posibles problemas. Pueden ocurrir varios problemas posibles durante la ejecución de un programa, pero el pragma de «advertencias» busca principalmente los errores de secuencias de comandos y los errores de sintaxis más comunes.
Nota: Este pragma de ‘ usar advertencias ‘ se introdujo en Perl 5.6 y versiones posteriores, para versiones anteriores, las advertencias se pueden activar usando ‘-w’ en la línea shebang/hashbang:
#!/usr/local/bin/perl – w
usar pragma estricto también funciona de la misma manera que usar advertencias, pero la única diferencia es que el pragma estricto abortaría la ejecución del programa si se encuentra un error, mientras que el pragma de advertencia solo proporcionaría la advertencia, no abortará la ejecución .
Ejemplo:
Perl
#!/usr/bin/perl use strict; use warnings; local $SIG{__WARN__} = sub { my $msz = shift; log1('warning', $msz); }; my $count1; count(); print "$count1\n"; sub count { $count1 = $count1 + 42; } sub log1 { my ($level, $msg) = @_; if (open my $out, '>>', 'log.txt') { chomp $msg; print $out "$level - $msg\n"; } }
Producción:
archivo de registro para almacenar la advertencia:
Cómo generar una advertencia
Las advertencias en Perl se pueden crear usando una función predefinida en Perl conocida como ‘warn’ .
Una función de advertencia en Perl genera un mensaje de advertencia para el error pero no sale del script. El script seguirá ejecutando el resto del código. Por lo tanto, se utiliza una función de advertencia cuando solo es necesario imprimir un mensaje de advertencia y luego continuar con el resto del programa.
Perl
#!/usr/bin/perl use warnings; # Assigning variable to the file my $filename = 'Hello.txt'; # Opening the file using open function open(my $fh, '>', $filename) or warn "Can't open file"; print "done\n";
Producción:
Habilitación y deshabilitación de advertencias
Las advertencias se pueden habilitar usando el pragma ‘usar advertencias’ en el código. Sin embargo, este pragma solo se puede usar en versiones más recientes de Perl, es decir, la versión 5.6 o superior. Para versiones anteriores, -w se usa para habilitar las advertencias. Este -w se agrega en la línea Hashbang:
#!/usr/local/bin/perl -w
Aunque esto se puede usar para habilitar las advertencias, esta ‘-w’ habilita las advertencias en todo el programa, incluso en los módulos externos que están siendo escritos y mantenidos por otras personas.
Este pragma de advertencia también puede ser reemplazado por use Modern::Perl . Este método habilita advertencias en un ámbito léxico.
Las advertencias se pueden desactivar de forma selectiva mediante el uso de pragma ‘sin advertencia’ dentro de un ámbito junto con una lista de argumentos. Si no se proporciona la lista de argumentos, este pragma deshabilitará todas las advertencias dentro de ese alcance.
Ejemplo:
Perl
use warnings; my @a; { no warnings; my $b = @a[0]; } my $c = @a[0];
Aquí, en el código anterior, la asignación del valor escalar genera un error para la asignación a $c pero no a $b, debido al pragma sin advertencias que se usa dentro del bloque.
Creación de sus propias advertencias
Perl permite crear y registrar sus propias advertencias para que otros usuarios puedan habilitarlas y deshabilitarlas fácilmente en los ámbitos léxicos. Esto se puede hacer usando un pragma predefinido ‘warnings::register’ .
package Geeks::Perl_program; use warnings::register;
La sintaxis anterior creará una nueva categoría de advertencias con el nombre del paquete Geeks::Perl_program . Ahora, esta categoría de advertencia se crea y se puede habilitar mediante el uso de advertencias ‘Geeks::Perl_program’ y se puede deshabilitar aún más sin usar las advertencias ‘Geeks::Perl_program’ .
Para verificar si el alcance léxico de la persona que llama ha habilitado una categoría de advertencia, se pueden usar advertencias::habilitado() . Otro pragma de advertencias::warnif() se puede usar para producir una advertencia solo si las advertencias ya están en vigor.
Ejemplo:
Perl
#!/usr/bin/perl package Geeks::Perl_program; use warnings::register; sub import { warnings::warnif( 'deprecated', 'empty imports from ' . __PACKAGE__ . ' are now deprecated' ) unless @_; }
El ejemplo anterior produce una advertencia en la categoría obsoleta.