Перед манипуляциями с $buffer (после вывода в него всего, что нужно) STDOUT нужно закрыть от греха подальше (либо сразу восстанавливать STDOUT в прежнем виде). Иначе могут возникнуть всякие неприятные моменты. В общем делать нужно примерно так:
my $buffer;
open my $oldout, ">&STDOUT"; #создаем копию STDOUT
close STDOUT;
open(STDOUT, '>',\$buffer);
print "qwerty";
close STDOUT
{$buffer = "Buffer= ".$buffer;} #Здесь обрабатываем переменную $buffer
open STDOUT, ">&", $oldout; #восстанавливаем STDOUT
print STDOUT $buffer; #Содержимое $buffer уйдет пользователю
---
Просто нежелатеьлно манипулировать с $buffer, пока он ассоциирован с STDOUT - могут возникнуть накладки, разобраться в которых без ста грамм нереально :)
Например, меня поставило в тупик следующее:
my $buffer;
open my $oldout, ">&STDOUT"; #создаем копию STDOUT
close STDOUT;
open(STDOUT, '>',\$buffer);
print "qwerty";
{$buffer = "Buffer= ".$buffer;} #Здесь обрабатываем переменную $buffer
print "aaa";
open STDOUT, ">&", $oldout; #восстанавливаем STDOUT
print STDOUT $buffer; #Содержимое $buffer уйдет пользователю
---
и получаем на выходе:
Bufferaaawerty
Кто-нибудь объяснит мне, отчего "aaa" залетело не в конец $buffer, а в его середину, да еще и с заменой трех символов?
|