我编写了代码,但我不知道如何直接在其他模块中访问全局变量
Test1档案
package Test1;
use strict;
sub new(@) {
my $class = shift;
(bless {}, $class)->init(ref($_[0]) eq 'HASH' ? @_ : {@_})
}
sub init(@) {
my ($self, $args) = @_;
$self->{$_} = $args->{$_} foreach (keys %{$args});
$self;
}
sub downloadable {
my ($self) = @_;
require Downloadable;
$self->{downloadable} ||= Downloadable->new();
return $self->{downloadable};
}
sub temp {
my ($self)=@_;
print $self->downloadable()->gaurav;
#gaurav is global variable of Downloadable file
}
my $obj=Test1->new();
$obj->temp();
可下载文件
package Downloadable;
sub new(@) {
my $class = shift;
(bless {}, $class)->init(ref($_[0]) eq 'HASH' ? @_ : {@_});
}
#
sub init(@) {
my ($self, $args) = @_;
$self->{$_} = $args->{$_} foreach (keys %{$args});
$self;
}
our $gaurav="he is gud boy";
答案 0 :(得分:2)
如果您希望能够通过$guarav
等方法访问print $self->downloadable()->gaurav
中的值,那么我建议您利用use constant
:
package Downloadable;
use constant gaurav => "he is gud boy";
这是有效的,因为constant
的工作原理是创建一个带有键名的子程序。这就是裸字gaurav
将返回值的原因。因为它在一个类中,所以可以将其视为类方法。你可以很容易地完成sub gaurav { "he is gud boy" }
,但这看起来不那么聪明,也不会在语义上传达你的意图。