Почему `exists` изменяет мою константу?

Функция exists может неожиданно автоматически оживить записи в хэшах.

Что меня удивляет, так это то, что это поведение также переносится на константы:

use strict;
use warnings;
use Data::Dump 'dump';

use constant data => {
                       'foo' => {
                                  'bar' => 'baz',
                                },
                       'a'   => {
                                  'b'   => 'c',
                                }
                     };

dump data;   # Pre-modified

print "No data for 'soda->cola->pop'\n" unless exists data->{soda}{cola}{pop};

dump data;   # data->{soda}{cola} now sprung to life

Вывод

 {a => {b => "c"}, foo => {bar => "baz"}}
Нет данных по запросу 'soda-> cola-> pop'
{a => {b => "c"}, foo => {bar => "baz"}, soda => {cola => {}}}

Я подозреваю, что это ошибка. Это что-то особенное для 5.10.1 или другие версии Perl ведут себя аналогичным образом?

7
задан Community 23 May 2017 в 12:11
поделиться