Как можно заставить Perl останавливаться при ссылке на значение undef?

Это работает

let myArr = [{"id":1, "performed":1},{"id":12, "performed":1},{"id":34, "performed":13}]
let conditon_id = [ 12,34,34];

let filtered=myArr.filter(value => {
if(value.performed==1 && conditon_id.includes(value.id)) {
  return value;
  }
})

console.log(filtered)

15
задан zigdon 16 September 2008 в 22:37
поделиться

5 ответов

use warnings FATAL => 'uninitialized';

use Carp ();
$SIG{__DIE__} = \&Carp::confess;

первая строка делает предупреждение фатальным. Следующие два вызывают отслеживание стека, когда Ваша программа умирает.

20
ответ дан 1 December 2019 в 00:54
поделиться

Вместо грязной игры с %SIG предложенный всеми остальными, всего use Carp::Always и быть сделанным.

Примечание, что можно ввести модули в сценарий без исходных модификаций просто путем выполнения его с perl -MCarp::Always; кроме того, можно установить PERL5OPT переменная среды к -MCarp::Always, чтобы иметь загруженный, даже не изменяя вызов сценария. (См. perldoc perlrun .)

15
ответ дан 1 December 2019 в 00:54
поделиться

Ссылка на значение undef не была бы проблемой сам по себе, но она может вызвать предупреждения, если Ваш код ожидает, что это будет чем-то другим, чем undef. (особенно, при попытке использовать ту переменную в качестве ссылки на объект). Вы могли поместить что-то в свой код, такой как:

use Carp qw();

[....]

Carp::confess '$variableName is undef' unless defined $variableName;

[....]
1
ответ дан 1 December 2019 в 00:54
поделиться

Включайте это:

use Carp ();

Затем включают один из этих строк во главе Вашего исходного файла:

local $SIG{__WARN__} = \&Carp::confess;
local $SIG{__WARN__} = \&Carp::cluck;

confess строка даст отслеживание стека, и cluck, строка является намного более краткой.

4
ответ дан 1 December 2019 в 00:54
поделиться

Один способ сделать те предупреждения фатальными состоит в том, чтобы установить обработчик сигналов для ПРЕДУПРЕДИТЬ виртуального сигнала:

$SIG{__WARN__} = sub { die "Undef value: @_" if $_[0] =~ /undefined/ };
1
ответ дан 1 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: