在Perl中,在变量定义之前设置类/模块名称有什么作用?

时间:2018-07-19 20:01:07

标签: perl

在使用Net::SIP模块时,我在某些函数中注意到有一些代码定义了参数的类。例如:

sub can_deliver_to {
    my Net::SIP::Leg $self = shift;
    [...]
    return 1;
}

指定Net::SIP::Leg对定义$self有什么目的?仅仅是语法糖来帮助开发人员了解变量$self应该是哪种类型?

1 个答案:

答案 0 :(得分:4)

如果以某种无效的方式访问结构/对象,则会引发编译时错误。

请参见https://perldoc.perl.org/functions/my.html

gpg --batch --passphrase somepassphrase -o  "Outfile.txt" --decrypt "Input.pgp"
     

my VARLIST my TYPE VARLIST my VARLIST : ATTRS my TYPE VARLIST : ATTRS 声明列出的变量在包围的块,文件或eval中是局部的(按词法)。如果列出了多个变量,则该列表必须放在括号中。

     

TYPE和ATTRS的确切语义和接口仍在不断发展。 TYPE可以是空词,可以是用myuse constant声明的常量。当前,它绑定到__PACKAGE__杂用的使用,并且属性使用fields杂用处理,或者也可以通过attributes模块从Perl 5.8.0开始处理。

如果您跳到https://perldoc.perl.org/fields.htmlAttribute::Handlers上的文档,则会看到以下示例:

fields