我正在尝试从另一个包中读取全局符号。我将包名称作为字符串。
我正在使用qualify_to_ref
模块中的Symbol
my $ref = qualify_to_ref ( 'myarray', 'Mypackage' ) ;
my @array = @$ref ;
给了我Not an ARRAY reference at ......
我认为我得到了解除引用的格式错误。
这是一个完整的示例程序。
use strict;
use Symbol ;
package Mypackage ;
our @myarray = qw/a b/ ;
package main ;
my $ref = qualify_to_ref ( 'myarray', 'Mypackage' ) ;
my @array = @$ref ;
答案 0 :(得分:4)
答案 1 :(得分:4)
您也可以在不使用外部模块的情况下执行此操作,如“符号表”下perldoc perlmod中所述:
package Mypackage;
use strict;
use warnings;
our @myarray = qw/a b/;
package main;
our @array;
*array = \@Mypackage::myarray;
print "array from Mypackage is @array\n";
但是,这是否是一个好主意取决于您的程序的上下文。通常,最好使用访问器方法获取Mypackage的值,或者使用Exporter将变量导出到命名空间。
答案 2 :(得分:1)
除了FM已经注意到的方式之外,您还可以通过类似哈希的界面访问typeglob的特定部分:
my $array = *{$ref}{ARRAY};
这可以方便地到达没有印记的部分,例如IO
部分。我在Mastering Perl中有一章关于这类内容。
答案 3 :(得分:0)
你需要取消引用它:@ $$ ref而不是@ $ ref