Perl:就像在java中我们可以访问其他类中的公共成员(变量)在perl中有任何相同的概念

时间:2015-06-10 06:39:08

标签: perl

我有2个perl文件,我想在另一个perl文件中使用一个变量的值作为输入,所以我能做到的是有任何像java这样的概念,我们可以将它声明为public并使用它。 任何帮助表示感谢!

2 个答案:

答案 0 :(得分:0)

正如@ user2864740指出的那样,你不需要" OO"在perl中分享变量。这是一种方式,假设你有两个文件 的 Foo.pm (包)的

#!/usr/bin/perl
use strict;
use warnings;
use Exporter;

package Foo;

our @ISA = qw(Exporter);
our @EXPORT = qw( blat); #exported by default
our @EXPORT_OK = qw(bar );#not exported by default

our $x="42";#variable to be shared should be "our" not "my"
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
print "World $_[0]\n" 
}
1;

从其他文件中访问该变量 bar.pl

#!/usr/bin/perl
use strict;
use warnings;
use Foo;


print "$Foo::x";#imported variable
blat("hello");#imported subroutine

如果要导入列出的功能,则:

#!/usr/bin/perl
use strict;
use warnings;
use Foo qw(bar blat);# import listed subs


print "$Foo::x";#imported variable
blat("hello ");#imported subroutine
bar("hi");#this also get imported

答案 1 :(得分:0)

在这个答案中,我将跳过讨论是否使用OOP的正确决定,并假设你想以OOP方式进行。

简而言之,Perl中对象的所有变量都可以视为公共变量。事实上,问题往往是相反的 - 将其中一些私有化。无论如何,如果你有一个文件Obj.pm,它定义了一个字段为foo的对象,如下所示:

package Obj;

sub new {
    my $class = shift;

    my $self = {foo => "bar"};

    bless $self, $class;
    return $self;
}

您可以访问foo变量,就好像它是公开的一样:

use Obj;

my $obj = Obj->new();
print $obj->{foo};

对于Perl中可能更愉快的OOP,请查看Moose包,它可以提供更大的灵活性。