加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何在子程序名称中启用点(.)?

发布时间:2020-12-16 06:06:02 所属栏目:大数据 来源:网络整理
导读:我正在使用自动加载创建一个带动态访问器的模块.被调用的方法名称中将包含一个或多个点.用法示例: use MyModule;my $var=MyModule-a.method.get;#MyModule::a.method.get() is now defined 看来这些点是子程序名称中的非法字符: #!/usr/bin/perluse warnin
我正在使用自动加载创建一个带动态访问器的模块.被调用的方法名称中将包含一个或多个点.用法示例:

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 "OKn";
}
mr.s();

分发

Illegal declaration of subroutine main::mr at main.pl line 5

那么,如何在子程序名称中启用点?

我理解,至少有些受访者可能会觉得不鼓励使用自动加载,以及尝试更改合法的子例程名称,而是提供更好的做法示例.我没有反对这些答案,也不认为它们的价值不高.不过,请尽量回答我原来的问题.

编辑:
为了澄清,最终目标是一个模块,当调用未定义的子例程时,它将根据其名称动态定义.为了实现这一点,我的意思是使用AUTOLOAD,其方式与this tutorial中使用的方式类似.

解决方法

你是对的,这个点在子程序名称中是非法的.这与自动加载无关,它们只是非法的.一个点用于字符串连接,所以你的例子

MyModule->a.method.get

实际上会被解释为

MyModule->a() . method() . get()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读