Última revisión, Error ha quedado obsoleto. Pero existen algunas cosas que lo haría sin ese módulo:
eval {
die "Oops!";
1;
} or do {
my $e = [email protected];
print("Something went wrong: $e\n");
};
Básicamente, utilice eval en lugar de try
, die en lugar de throw
, y buscar la excepción en [email protected]
. El valor verdadero al final del bloque eval es parte de una expresión idiomática para evitar que [email protected]
cambie involuntariamente antes de volver a usarse en versiones Perl anteriores a 5.14, consulte P::C::P::ErrorHandling::RequireCheckingReturnValueOfEval para obtener más información. Por ejemplo, este código adolece de este defecto.
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
eval {
die "Oops!";
};
if (my $e = [email protected]) {
print("Something went wrong: $e\n");
}
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
Pero tenga en cuenta que muchas de las operaciones de Perl no generan excepciones cuando fallan; simplemente devuelven un código de error. Este comportamiento se puede modificar mediante autodie para módulos internos y módulos estándar. Si está utilizando autodie
, entonces la forma estándar de hacer try/catch es esto (directamente de la perldoc autodie):
use feature qw(switch);
eval {
use autodie;
open(my $fh, '<', $some_file);
my @records = <$fh>;
# Do things with @records...
close($fh);
};
given ([email protected]) {
when (undef) { say "No error"; }
when ('open') { say "Error from open"; }
when (':io') { say "Non-open, IO error."; }
when (':all') { say "All other autodie errors." }
default { say "Not an autodie error at all." }
}
Para conseguir un StackTrace, mira a Carp.
¿Cómo puedo descargar esta advertencia en los registros? – pitchblack408
¿Puedo crear excepciones? – pitchblack408
No estoy seguro de lo que está preguntando. Puede volcar cosas en los archivos de registro al iniciar sesión y crea excepciones con 'die' o' croak'. ¿Estás preguntando cómo armar objetos de excepción, etc.? Esa sería una pregunta separada. –