Заметил очень странное поведение нижеприведенной простейшей программы на Perl. По всем законам, программа должна вывести на стандартный вывод строку 'Hello!Hello2!Hello3!', затем после 5 секунд завершить выполнение. Однако все происходит с точности до наоборот: сначала программа ждет 5 секунд, потом выводит строку и завершает выполнение.
Замечено, что это связано с повторным использованием файлового дескриптора, хотя последний никак не связан с дескриптором STDOUT. Сами файлы в open() могут быть любыми, режим открытия тоже не влияет на результат. Если убрать строки с повторным использованием дескриптора FILE_D, то все начинает работать как надо.
Кто-нибудь может прокомментировать столь необычное поведение? Спасибо.
Собственно, исходник программы:
#!/usr/bin/perl -w
use strict; use locale;
open (FILE_D, '/etc/profile') or die("fail\n"); close (FILE_D);
open (FILE_D, '/etc/passwd') or die("fail\n");
tstprint();
close (FILE_D);
sub tstprint { print "Hello!"; print "Hello2!"; print "Hello3!"; sleep(5); }