了解 Perl 包中的完全限定名称

Understanding fully qualified names in Perl packages

提问人:snoopyjc 提问时间:12/17/2022 最后编辑:wovanosnoopyjc 更新时间:1/2/2023 访问量:79

问:

我正在尝试理解 CGI.pm 中的一些代码,特别是:

package CGI::MultipartBuffer;
....
$MultipartBuffer::INITIAL_FILLUNIT ||= 1024 * 4;
...
$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

我需要知道的是完全限定的名称,在我的解释中,它们都应该是,但我必须弄错了,否则为什么需要第二个分配语句?$MultipartBuffer::INITIAL_FILLUNIT$INITIAL_FILLUNIT$CGI::MultipartBuffer::INITIAL_FULLUNIT

Perl 命名空间

评论


答:

2赞 ikegami 12/17/2022 #1

$INITIAL_FILLUNIT未声明,因此它是一个包变量。[1] 由于当前的包是 ,它指的是 。CGI::MultipartBuffer$CGI::MultipartBuffer::INITIAL_FILLUNIT

这意味着

$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

方法

$CGI::MultipartBuffer::INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

  1. 这将被 禁止。use strict;

评论

0赞 snoopyjc 12/17/2022
谢谢 - $MultipartBuffer::INITIAL_FILLUNIT是什么意思?
0赞 snoopyjc 12/18/2022
我在符号表上使用 perl -d 和 Dumper,看起来 $MultipartBuffer::INITIAL_FILLUNIT 实际上意味着 $main::MultipartBuffer::INITIAL_FILLUNIT。我假设它的意思是 $CGI::MultipartBuffer::INITIAL_FILLUNIT
0赞 ikegami 12/18/2022
回复“$MultipartBuffer::INITIAL_FILLUNIT是什么意思”,这是一个变量。你是什么意思?
0赞 ikegami 12/18/2022
回复“看起来 $MultipartBuffer::INITIAL_FILLUNIT 实际上意味着 $main::MultipartBuffer::INITIAL_FILLUNIT”,从技术上讲,是的。但只是因为它也是 $main::main::MultipartBuffer::INITIAL_FILLUNIT、$main::main::main::MultipartBuffer::INITIAL_FILLUNIT、$main::main::main::main::MultipartBuffer::INITIAL_FILLUNIT 等。但真的没有。它的意思是 $MultipartBuffer::INITIAL_FILLUNIT
2赞 ikegami 12/18/2022
同样,不是 main 的子包。它不是 ,不是$MultipartBuffer::INITIAL_FILLUNIT$main::MultipartBuffer::INITIAL_FILLUNIT