Учитывая такой код, я не получаю никаких предупреждений.
use strict;
use warnings;
open STDERR, '>&', STDOUT;
Учитывая этот код, я получаю фатальную ошибку.
use strict;
use warnings;
use autodie;
open STDERR, '>&', STDOUT;
Bareword "STDOUT" not разрешено при использовании «строгих подпрограмм» в строке ./test.pl 6. Выполнение ./test.pl прервано из-за ошибок компиляции.
Почему autodie
указывает на строгие подпрограммы как источник этой ошибки - когда в первом примере была явно строгая ошибка, и у меня не было ошибки.
С diagnostics
ошибка объясняется следующим образом ..
Bareword «STDOUT» не допускается, когда используются «строгие подпрограммы» в строке ./test.pl 7. Выполнение ./test.pl прервано из-за ошибок компиляции (# 1) (F) При использовании «строгих подпрограмм» - пустое слово допускается только в качестве идентификатора подпрограммы, в фигурных скобках или слева от символа «=>». Возможно, вам нужно предварительно объявить подпрограмму?
Все это можно решить, выполнив
open STDERR, '>&', *STDOUT;
Тогда это не голое слово, но почему специальное слово голое слово открыто для открытия без autod ie, а не с autod ie? Здесь что-то еще происходит?