通常,当我建立在Perl的数据结构,我最终不得不从声明它%leaf来%root,所以我一直有一个模块,让我从建立修修补补
$seed来$seed->trunk->branch->leaf.
使用AUTOLOAD和new子程序并不困难.我对SO的问题是如何检测是否正在使用'strict'编译指示,以便模块以不同的模式运行,这需要在使用之前"声明"变量,因此我不会意外地为$seed->drunk当我使用strict时 - 假设模块被调用branch,这是模块使用的有效语法
$seed->declare('trunk');
$seed->trunk(new branch);
$seed->trunk->declare('leaf');
$seed->trunk->leaf("value");
Run Code Online (Sandbox Code Playgroud)
如何从模块中检测调用程序中的严格编译指示是否有效?
可能这是不可能的 - 在这种情况下,我必须使用静态变量来处理与模块无关的编译指示.
EDITED/POSTSCRIPT:
我编写了初始版本,没有检查'严格'或实现'declare'子程序,并意识到自动加载器不提供足够简单的用户语法,如果它通过引用操作,所以我写它来检查第一个参数并分配传递给对象引用的哈希表中的元素的值,否则如果没有参数,则返回指定元素的值.
所以我发布了分支模块的代码以满足您的好奇心.请注意,我还没有实施严格检查.
package branch;
sub new
{
my $type = shift;
my $self = { };
bless $self, $type;
return $self;
}
sub DESTROY
{
my $self = shift;
%$self = undef;
}
sub AUTOLOAD
{
my $self = shift;
my $value = shift;
my $sub …Run Code Online (Sandbox Code Playgroud)