Этот вопрос относится к этому одному.
Вы говорите, что эти два одинаковы:
${ "::_<$filename" } # Not allowed under strict.
${ "_<$filename" } # In main package # Not allowed under strict.
Но как же тогда возможно следующее?
if( ${ "_<$filename" } ne ${ "::_<$filename" } ) {
print "MISMATCH\n";
print ">>${ '_<$filename' }<<\n>>${ '::_<$filename' }<<\n";
}
выход:
MISMATCH
>><<
>><<
это происходит, когда $filename
равно /home/kes/work/projects/tucha/monkeyman/app/maitre_d/../..//local/lib/perl5/Specio/Constraint/Role/Interface.pm
UPD
с "
кавычками как @HåkonHægland
рекомендуется
print "MISMATCH\n";
print ">>${ \"_<$filename\" }<<\n>>${ \"::_<$filename\" }<<\n";
Devel::Peek::Dump( ${ "_<$filename" } );
Devel::Peek::Dump( ${ "::_<$filename" } );
Devel::Peek::Dump( ${ $::{"_<$filename"} } );
Devel::Peek::Dump( ${ ${'::'}{"_<$filename"} } );
вывод:
MISMATCH
>><<
>>/home/kes/work/projects/tucha/monkeyman/app/maitre_d/../..//local/lib/perl5/Specio/Constraint/Role/Interface.pm<<
SV = PV(0xfb84520) at 0xff527a0
REFCNT = 1
FLAGS = ()
PV = 0
SV = PV(0x2e43d80) at 0x2f40400
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2edc4a0 "/home/kes/work/projects/tucha/monkeyman/app/maitre_d/../..//local/lib/perl5/Specio/Constraint/Role/Interface.pm"\0
CUR = 111
LEN = 113
COW_REFCNT = 0
SV = PV(0x2e43d80) at 0x2f40400
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2edc4a0 "/home/kes/work/projects/tucha/monkeyman/app/maitre_d/../..//local/lib/perl5/Specio/Constraint/Role/Interface.pm"\0
CUR = 111
LEN = 113
COW_REFCNT = 0
SV = PV(0x2e43d80) at 0x2f40400
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2edc4a0 "/home/kes/work/projects/tucha/monkeyman/app/maitre_d/../..//local/lib/perl5/Specio/Constraint/Role/Interface.pm"\0
CUR = 111
LEN = 113
COW_REFCNT = 0
Из результатов видно, что переменные темы отличаются:
SV = PV(0xfb84520) at 0xff527a0
SV = PV(0x2e43d80) at 0x2f40400