По умолчанию, $_
- это сокращение от $::_
, как вы уже продемонстрировали.
Однако в своей части кода в своем обновлении вы изменили то, что $_
означаетсоздание лексического имени $_
.Эта лексика используется в случае, о котором вы спрашиваете.
our $x
создает лексическую переменную $x
, связанную с $x
текущего пакета, за исключением «суперглобальных».Для «суперглобальных» новая переменная ассоциируется с «суперглобальными».
>perl5140 -le"package PA; our $x='A'; package PB; $x='B'; print $PA::x;"
B
>perl5140 -le"package PA; our $_='A'; package PB; $_='B'; print $::_;"
B
Кажется, что исключение не существовало в 5.8.
Кстати, выпонимаете, что 5.8 и 5.10 официально закончились?