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

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

概述我正在使用自动加载创建一个带动态访问器的模块.被调用的方法名称中将包含一个或多个点.用法示例: use MyModule;my $var=MyModule->a.method.get;#MyModule::a.method.get() is now defined 看来这些点是子程序名称中的非法字符: #!/usr/bin/perluse warnings;use strict;sub 我正在使用自动加载创建一个带动态访问器的模块.被调用的方法名称中将包含一个或多个点.用法示例:

use MyModule;my $var=MyModule->a.method.get;#MyModule::a.method.get() is Now defined

看来这些点是子程序名称中的非法字符:

#!/usr/bin/perluse 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中使用的方式类似.

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

MyModule->a.method.get

实际上会被解释为

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

以上是内存溢出为你收集整理的perl – 如何在子程序名称中启用点(.)?全部内容,希望文章能够帮你解决perl – 如何在子程序名称中启用点(.)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1213099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存