Perl при записи в "файл памяти" использует трюки с подбором шаблонов

Когда я запускаю этот код, я получаю "no":

my $memory_file;
my $fh;
open ($fh, '>', \$memory_file);
print $fh "abc";
if( $memory_file =~ m/^.*$/ )
{ print "yes\n" }
else
{ print "no\n" }

Если я распечатаю $memory_file, содержимое действительно "abc".

Если я изменю шаблон на .* (без ^ или $), то все работает как ожидалось.

Если я помещу строку $memory_file = "abc" перед матчем, я получу 'yes' (как и ожидалось изначально).

Что здесь происходит?

(Это perl 5.14.1)

Обновление: Еще немного обсуждений на PerlMonks. Это похоже на ошибку, я запишу ее в журнал.

Обновление 2: Прекрасные разработчики Perl исправили эту ошибку: https://rt.perl.org/rt3//Public/Bug/Display.html?id=108398

11
задан jwd 24 January 2012 в 17:16
поделиться