Ответ 1
Это интересный вопрос, и я никогда не думал об этом, так что это было так.
Я нашел ссылку на вопрос здесь, но это примерно год. Однако соответствующая часть источника perl не изменилась с тех пор, и здесь можно увидеть здесь. По существу, если вы посмотрите toke.c
в источнике perl, вы увидите следующее:
if (PL_perldb) {
/* Generate a string of Perl code to load the debugger.
* If PERL5DB is set, it will return the contents of that,
* otherwise a compile-time require of perl5db.pl. */
const char * const pdb = PerlEnv_getenv("PERL5DB");
...
}
...
if (PL_minus_E)
sv_catpvs(PL_linestr,
"use feature ':5." STRINGIFY(PERL_VERSION) "';");
В принципе, отладчик загружается до того, как будет обработан флаг -E
, поэтому функции еще не включены при загрузке отладчика. Суть в том, что в настоящее время вы не можете использовать -E
с помощью команды -d
. Если вы хотите использовать say
, switch
или любую другую функцию из приглашения отладки, вы должны сделать это следующим образом:
DB<1> use feature 'say'; say "x"
x
Ближайшим я видел решение:
- скопировать perl5db.pl из PERL5LIB в любой из PERL5LIB или в текущий каталог с другим именем, скажем myperl5db.pl
- Измените myperl5db.pl, чтобы использовать функцию ': 5.10'; (или просто "состояние", или просто "сказать" ) в первой строке.
- Задайте переменную окружения PERL5DB "BEGIN {require" myperl5db.pl "}"
Что я нашел в PerlMonks.