[英]Reading another packages symbol table in Perl
我試圖從另一個包中讀取全局符號。 我將包名稱作為字符串。 我正在使用Symbol
模塊中的qualify_to_ref
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 ;
您也可以在不使用外部模塊的情況下執行此操作,如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將變量導出到命名空間。
除了FM已經注意到的方式之外,您還可以通過類似哈希的接口訪問typeglob的特定部分:
my $array = *{$ref}{ARRAY};
這可以方便地到達沒有印記的部件,例如IO
部分。 我在Mastering Perl中有一章關於這類內容。
你需要取消引用它:@ $$ ref而不是@ $ ref
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.