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ファイルに変数があるとします。しかし、最初のファイルの変数を使用したいと思います。これを達成する方法は?
一般に、複数のファイルで作業していて、それらの間で変数またはサブルーチンをインポートする場合、プロジェクトの成長に伴い、必要なファイルがやや複雑になることがわかります。これは、すべてが共通の名前空間を共有しているためですが、一部の変数は一部のファイルで宣言されており、他のファイルでは宣言されていません。
これが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";
そして、モジュールを使用するには:
#!/usr/bin/Perl
use strict;
use warnings;
use My::Module; # imports / declares the two variables
print @a;
print @b;
そのuse
行は実際には次のことを意味します:
BEGIN {
require "My/Module.pm";
My::Module->import();
}
import
メソッドはExporter
から派生しています。呼び出されると、@EXPORT
配列を呼び出しコードに挿入します。
はい、グローバル変数を共有します。何か問題がありますか?
例:
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
パッケージを使用して変数をエクスポートできますか?