我已经很久没有用 Perl 编写任何代码了。现在我又开始编写代码了,在单个“.pm”文件中编写两个包时遇到了一个有趣的情况。到目前为止,我认为如果我在一个文件中定义两个包(例如 ConfigData 和 RuntimeData),我可以为每个包定义一个具有相同名称(例如 my $instance)的变量(用“my”声明),而不会发生冲突。作为示例,下面是一段最简洁的代码来说明这一点:
package Jabs::ConfigData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # End of 'ConfigData'
package Jabs::RuntimeData;
use strict;
use warnings;
my $instance;
sub new {
my ($class) = @_;
unless (defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
1; # End of 'RuntimeData'
我调用了 perl -c test2.pm 并收到以下消息作为反馈:
"my" variable $instance masks earlier declaration in same scope at test2.pm line 27.
test2.pm syntax OK
现在我不清楚为什么范围应该相同。因为'我的 $instance 是在两个不同的包中定义的。我使用的是 Ubuntu 24.04 LTS 和 Perl5(修订版 5 版本 38 颠覆版 2)
有人能为我解释一下我的理解问题吗?