gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:57:07 25 4
gpt4 key购买 nike

我正在使用自动加载创建一个带有动态访问器的模块。被调用的方法的名称中会有一个或多个点。使用示例:

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

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

我知道,至少一些受访者可能会觉得不鼓励使用自动加载,并试图更改合法的子例程名称,而不是提供更好的实践示例。我不反对这些答案,也不认为它们的值(value)较低。不过,也请尝试回答我最初的问题。

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

最佳答案

你是对的,子程序名称中的点是非法的。这与自动加载无关,它们只是非法的。点用于字符串连接,因此您的示例

MyModule->a.method.get

实际上会被解释为

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

关于perl - 如何在子程序名称中启用点 (.)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com