Мне нужно использовать один и тот же дескриптор файла в нескольких perl-модулях. Вот мой пример a.plглобальный дескриптор файла
#!/usr/bin/perl -w
our $OUT_FILE_HANDLE;
require b;
open($OUT_FILE_HANDLE, ">./a.log");
print $OUT_FILE_HANDLE "text1\n";
b::f($OUT_FILE_HANDLE); // this works
b.pm
package b;
sub f($) {
my $a = shift;
print $a "text2\n"; // get error here
}
f($main::OUT_FILE_HANDLE);
1;
Я получаю сообщение об ошибке «Не удается использовать неопределенное значение в качестве опорного символа»
Если я использую обрабатывать в b.pm напрямую (без передачи его в качестве аргумента функции), он работает нормально
b.pm
package b;
sub f() {
print $main::OUT_FILE_HANDLE "text2\n"; // this works
}
f();
1;
Вы знаете, что есть основной модуль с именем 'B', не так ли? Вы должны избегать однобуквенных имен модулей, даже когда проверяете ситуацию. Или, возможно, * особенно * при тестировании. – TLP