【发布时间】:2014-05-28 18:07:54
【问题描述】:
我正在使用自动加载创建具有动态访问器的模块。被调用的方法名称中将包含一个或多个点。使用示例:
use MyModule;
my $var=MyModule->a.method.get;
#MyModule::a.method.get() is now defined
这些点似乎是子程序名称中的非法字符:
#!/usr/bin/perl
use warnings;
use strict;
sub mr.s
{
print "OK\n";
}
mr.s();
放弃
Illegal declaration of subroutine main::mr at main.pl line 5
那么,如何在子例程名称中启用点?
我了解,至少有一些受访者可能会不鼓励使用自动加载,并尝试更改合法的子例程名称,而不是提供更好的做法示例。我不反对这些答案,也不认为它们没有任何价值。不过,请尝试为我最初的问题提供答案。
编辑: 澄清一下,最终目标是一个模块,其中,当调用未定义的子例程时,它是根据其名称动态定义的。为了实现这一点,我的意思是使用 AUTOLOAD,其使用方式类似于 this tutorial 中的使用方式。
【问题讨论】:
-
你的问题和答案与自动加载无关;也许您的意思与我们预期的不同?
-
您的文字似乎暗示了对象方法,但您的使用示例是针对类方法的;你能澄清一下吗?
-
我已经编辑了一些关于自动加载的说明。我目前的意思是只调用类方法并使用包变量。在我的问题中,我真的没有看到任何“对象”含义,你能指出它们吗?
-
“访问器”通常不是用于类方法的术语(至少在 perl OO 世界中)
-
@ysth,类可以有访问类属性的访问器。
标签: perl subroutine