Как получить доступ к дескриптору файла и формату соответственно по typeglob? - PullRequest
1 голос
/ 21 июля 2011

enter image description here

Кажется, filehandle и format не имеют префиксов, поэтому я не могу получить ссылки на них с помощью таких трюков, как %{*spud}.

Я что-то пропускаю?

ОБНОВЛЕНИЕ

Как получить доступ к format?Почему $fd=*STDOUT и $fd=\*STDOUT оба работают?

ОБНОВЛЕНИЕ2

Код:

package Foo;
our $spud = 'a scalar';
our @spud = 'an array';
our %spud = (a => 'hash');
sub spud {}
format spud =
.
open 'spud', $0; 

my $stash = \%Foo::;
my $name  = 'spud';
my $glob  = $$stash{$name};

for my $type (qw(SCALAR ARRAY HASH CODE IO FORMAT)) {
    #this works
    #print *$glob{$type}, $/; 
    #this doesn't work,only output one row of scalar                                  
    print *{$FOO::{spud}}{$type}, $/; 
}

Вывод:

[root@perl]# perl tb
SCALAR(0xa4dcf30)





[root@perl]# 

Ответы [ 2 ]

2 голосов
/ 21 июля 2011
{package Foo;
    our $spud = 'a scalar';
    our @spud = 'an array';
    our %spud = (a => 'hash');
    sub spud {}
    format spud =
.
    open 'spud', $0;
}

my $stash = \%Foo::;
my $name  = 'spud';
my $glob  = $$stash{$name};

for my $type (qw(SCALAR ARRAY HASH CODE IO FORMAT)) {
     print *$glob{$type}, $/;
}

отпечатков:

SCALAR(0x810070)
ARRAY(0x81c750)
HASH(0x81bb00)
CODE(0x81bbd0)
IO::Handle=IO(0x81b670)
FORMAT(0x81bc40)
0 голосов
/ 21 июля 2011

* spud даст вам дескриптор файла из типа glob.Смотрите здесь: Typeglobs и Filehandles

...