如何通过perl中的oops访问全局变量

时间:2014-04-02 06:24:09

标签: perl oop

我编写了代码,但我不知道如何直接在其他模块中访问全局变量

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";

1 个答案:

答案 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" },但这看起来不那么聪明,也不会在语义上传达你的意图。