使用setter Perl从另一个包设置全局变量

时间:2015-03-20 03:25:37

标签: perl scope arguments global-variables

我正在尝试在另一个包中设置全局变量,但不幸的是它被设置为undef,但是它在调试模式下是正确的显示参数变量但是将其设置为undef。
这是我的代码。

SuperFunc.pm

#!/usr/bin/perl
use strict;
use warnings;
package  SuperFunc;

my $global_x = 20;
my $global_y = 20;

sub set_x {
    my $new_x = shift;
    if($new_x) {
       $global_x = $new_x;
    }
}

sub set_y {
    my $new_y = shift;
    if($new_y) {
       $global_y = $new_y;
    }
}

和Main.pl

.......
SuperFunc::set_x($x);
SuperFunc::set_y($y);
.......

有什么问题?

1 个答案:

答案 0 :(得分:0)

似乎工作正常。如果没有更多代码,我真的不能理解这个问题。

也许您正在寻找http://perldoc.perl.org/functions/our.html

脚本

use strict;
use lib "./lib";
use SuperFunc;

SuperFunc::log();
SuperFunc::set_x(1);
SuperFunc::set_y(2);
SuperFunc::log();

模块

#!/usr/bin/perl
use strict;
use warnings;
package  SuperFunc;

my $global_x = 20;
my $global_y = 20;

sub set_x {
    my $new_x = shift;
    if($new_x) {
       $global_x = $new_x;
    }
}

sub set_y {
    my $new_y = shift;
    if($new_y) {
       $global_y = $new_y;
    }
}

sub log {
  print "$global_x\n$global_y";
}

输出

20

20

1

2