Есть ли способ die
использования в Perl таким образом, что $@
не изменяется? Насколько я могу судить, die
искажает содержимое $@
при определенных обстоятельствах и "выбрасывает", передавая управление нелокально. Я просто хочу сделать последнее.
Когда die
- строка, добавляется имя файла и номер строки к $@
, когда объект исключения, переданный в die
, является строкой (или undef).
Например,
#!/usr/bin/env perl
# foo.pl
use strict;
use warnings;
use Data::Dumper;
eval { die '1'; };
my $hash_ref = {
msg => $@,
};
print Dumper($hash_ref);
печать:
$VAR1 = {
'msg' => '1 at foo.pl line 7.
'
};
Но если аргумент не является строкой (или undef), он не изменяется.
#!/usr/bin/env perl
# foo2.pl
use strict;
use warnings;
use Data::Dumper;
eval { die ['string-inside-arrayref']; };
my $hash_ref = {
msg => $@,
};
print Dumper($hash_ref);
Этот фрагмент производит:
$VAR1 = {
'msg' => [
'string-inside-arrayref'
]
};