Perl:就像在java中一样,我们可以访问其他类中的公共成员(变量)Perl中是否有相同的概念

Perl:就像在java中一样,我们可以访问其他类中的公共成员(变量)Perl中是否有相同的概念,perl,Perl,我有2个perl文件,我想在另一个perl文件中使用一个变量的值作为输入,所以我如何做到这一点,是否有任何像java这样的概念,我们可以将其声明为公共并使用它。 感谢您的帮助 正如@user2864740所指出的,在perl中不需要“OO”来共享变量 Foo.pm(套餐): #!/usr/bin/perl use strict; use warnings; use Exporter; package Foo; our @ISA = qw(Exporter); our @EXPORT = qw

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

正如@user2864740所指出的,在perl中不需要“OO”来共享变量 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

在这个答案中,我将跳过关于使用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
软件包,该软件包为您提供了更大的灵活性。

通读并-虽然您不需要“OO”来共享变量/状态,但您可以通过使用包名完全限定变量来访问使用
our
(而不是
my
)声明的变量,例如
print$Other::Package::shared_value
,但这是一件丑陋的事情。通常,您应该编写一个访问方法并将其导出到调用代码中,即使您的模块不是面向对象的。你应该显示你的代码和你想分享的价值的全部细节让我知道如果你想OO方式,我会更新,但做一些家庭作业。