Я вытаскиваю волосы, используя дескриптор файла, возвращенный select.
Документация о избранных читает:
- select
Возвращает текущий выбранный дескриптор файла.
У меня есть фрагмент кода, который печатает некоторые данные и обычно выполняется без какого-либо перенаправления.Но есть один вариант использования, где select используется для перенаправления вывода на печать в файл.
В этом фрагменте кода мне нужно использовать текущий дескриптор выбранного файла.Я попробовал следующий фрагмент кода:
my $fh = select;
print $fh "test\n";
Я написал короткую тестовую программу, чтобы продемонстрировать свою проблему:
#!/usr/bin/perl
use strict;
use warnings;
sub test
{
my $fh=select;
print $fh "@_\n";
}
my $oldfh;
# this works :-)
open my $test1, "> test1.txt";
$oldfh = select $test1;
test("test1");
close select $oldfh if defined $oldfh;
#this doesn't work. :-(
# Can't use string ("main::TEST2") as a symbol ref while "strict refs" in use
open TEST2,">test2.txt";
$oldfh = select TEST2;
test("test2");
close select $oldfh if defined $oldfh;
#this doesn't work, too. :-(
# gives Can't use string ("main::STDOUT") as a symbol ref while "strict refs" in use at
test("test");
Кажется, что select не возвращает ссылку на дескриптор файлано строка, содержащая имя дескриптора файла.
Что мне нужно сделать, чтобы всегда получить пригодный для использования дескриптор файла из возвращаемого значения select?
PS Мне нужно передать этот дескриптор файла какВыходной файл в XML :: Simple XMLout ().