2

file_1.plのパッケージmainに次のグローバル変数があります。

package main;

my $var = -1;

この変数を別のperlファイルから更新する必要がある場合、それを行う方法は何ですか?私は試した:

$main::var = 1

しかし、それは機能しませんでした。

それを行う正しい方法は何ですか?

ありがとう!

4

3 に答える 3

8

my字句変数を作成します。スコープはブロック、またはブロック内でない場合はファイルにスコープされます。それらは範囲外では見ることができません。

他の回答が示しているように、グローバル変数を作成できます。

our $var;

ただし、より良い方法は、コードの他の部分に字句バージョンを更新するためのインターフェイスを提供することです。

my $private;

sub set_private { $private = shift }

ただし、それを行う場合は、値を取得するためのインターフェイスも必要になる場合があります。これで、変数はそれを使用するサブルーチンと同じスコープにある必要があるだけなので、ファイルの残りの部分から変数を隠すことができます。

{
my $private;
sub set_private { $private = shift }

sub get_private { $private }
}

これで、オブジェクト(この場合はシングルトン)からわずか1歩の距離になります。

use v5.12;

package Foo {
    my $private;
    sub new { bless \$private, shift }
    sub set { my $self = shift; $$self = shift; }

    sub get { my $self = shift; $$self; }
    }
于 2012-04-05T11:54:27.983 に答える
3

変数を宣言する必要があります。そうしないと、レキシカルour変数と見なされるため、次のように変更します

our $var = -1; 
于 2012-04-05T11:24:25.753 に答える
1

ラッパー関数を作成できます。

メインファイル内

our $var;
sub updateGlobal {
   $var = shift;
}

他のファイルでは、関数を呼び出すだけです

updateGlobal(1);
于 2012-04-05T11:23:53.983 に答える