2010-12-28 5 views
20

2つの異なるperlスクリプト間でグローバル変数を共有またはエクスポートするにはどうすればいいですか?ここで2つの異なるperlスクリプト間でグローバル変数を共有/エクスポートする方法は?

は状況です:

first.pl

#!/usr/bin/perl 
use strict; 
our (@a, @b); 
......... 

second.pl

#!/usr/bin/perl 
use strict; 
require first.pl; 

私はグローバル変数(@a@b)を使用したいの中で宣言first.pl

また、最初のperlファイルと同じ2番目のperlファイルに変数があるとします。しかし、私は最初のファイルの変数を使いたいです。これを達成する方法は?

答えて

15

これらはグローバル変数を共有します。あなたはそれにいくつかの問題を見ていますか?

例:

first.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

our (@a, @b); 

@a = 1..3; 
@b = "a".."c"; 

second.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

require "first.pl"; 

our (@a,@b); 
print @a; 
print @b; 

与える:

$ perl second.pl 
123abc 
+1

ありがとう....私はsecond.plで同じ変数を宣言していませんでした。最初に、宣言されていないとき、変数 "@a"は.....にインポートされていません。これは現在動作しています... – Cthar

2

カントあなたはパッケージを使用して、変数をエクスポートしますか?

+1

ありがとう....この問題が発生した後....私は、パッケージのとにかくありがとう。 – Cthar

29

一般に、複数のファイルを扱い、それらの間で変数やサブルーチンをインポートすると、ファイルが必要になるということは、プロジェクトが成長するにつれて少し複雑になります。これは、共通の名前空間を共有するすべてのものが、一部のファイルでは宣言されているが、他のファイルでは宣言されていない変数があるためです。

これは通常、Perlで解決され、モジュールを作成してそれらのモジュールからインポートする方法です。この場合:次に

#!/usr/bin/perl 

package My::Module; # saved as My/Module.pm 
use strict; 
use warnings; 

use Exporter; 
our @ISA = 'Exporter'; 
our @EXPORT = qw(@a @b); 

our (@a, @b); 

@a = 1..3; 
@b = "a".."c"; 

およびモジュールを使用する:use線が実際意味

#!/usr/bin/perl 

use strict; 
use warnings; 

use My::Module; # imports/declares the two variables 

print @a; 
print @b; 

を:

BEGIN { 
    require "My/Module.pm"; 
    My::Module->import(); 
} 

import方法はExporterから来ます。呼び出されると、@EXPORT配列内の変数を呼び出しコードにエクスポートします。

Exporterperlmodのドキュメントを見ると、出発点がわかります。

関連する問題