Как установить нашу переменную $ walkHandle в B :: Concise - PullRequest
0 голосов
/ 18 августа 2010

В своей функции я делаю это

my $output; 
open (MEM, '>', \$output or die "Can't open MEM: $!");
$B::Concise::walkHandle = \*MEM;

Но я получаю ошибку

Not a GLOB reference at C:/Perl/lib/mycrap.pm line 157.
CHECK failed--call queue aborted.

Что мне делать

1 Ответ

3 голосов
/ 18 августа 2010

Не является ссылкой GLOB - (F) Неустранимая ошибка (trappable) .

(F) Perl was trying to evaluate a reference to a "typeglob" 
(that is, a symbol table entry that looks like *foo ), 
but found a reference to something else instead. 
You can use the ref() function to find out what kind of ref it really was. 

От Perldoc

It isn't possible to create a true reference to an IO handle 
(filehandle or dirhandle) using the backslash operator.

Максимум, что вы можете получить, - это ссылка на глобус типа, который на самом деле является полной записью таблицы символов. Но посмотрите объяснение синтаксиса *foo{THING} в ссылке Perlref. Тем не менее, вы все еще можете использовать глобусы типа и глобусы, как если бы они были дескрипторами ввода-вывода.

сделать что-то вроде $globref = \*foo;

Для получения более подробной информации перейдите к См. perlref .

Поскольку я вижу ваши предыдущие вопросы, я думаю, что вы ищете walk_output

lets you change the print destination from STDOUT to another open filehandle, or into a string passed as a ref (unless you've built perl with -Uuseperlio).

см. B :: Concise & B :: Concise - дерево синтаксиса Walk Perl, печатая краткую информацию об операциях для полных примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...