file_1.plのパッケージmainに次のグローバル変数があります。
package main;
my $var = -1;
この変数を別のperlファイルから更新する必要がある場合、それを行う方法は何ですか?私は試した:
$main::var = 1
しかし、それは機能しませんでした。
それを行う正しい方法は何ですか?
ありがとう!
file_1.plのパッケージmainに次のグローバル変数があります。
package main;
my $var = -1;
この変数を別のperlファイルから更新する必要がある場合、それを行う方法は何ですか?私は試した:
$main::var = 1
しかし、それは機能しませんでした。
それを行う正しい方法は何ですか?
ありがとう!
は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; }
}
変数を宣言する必要があります。そうしないと、レキシカルour
変数と見なされるため、次のように変更します
our $var = -1;
ラッパー関数を作成できます。
メインファイル内
our $var;
sub updateGlobal {
$var = shift;
}
他のファイルでは、関数を呼び出すだけです
updateGlobal(1);