17

スクリプトがあり、そのスクリプトでいくつかの変数 (任意の種類の変数定数または法線) を宣言する必要があり、それらの変数は、そのスクリプトから自動的main.plに含めるすべてのスクリプトとモジュールで使用できる必要があります。main.pl

内外に変数がある場合$myVarmain.plrequire main.plscript1.plor script2.pl、およびその特定のスクリプトまたはモジュールで定義された任意の var にアクセスするようscript3.pmに、これらのスクリプトのいずれかからアクセスする必要があります。$myVar

ネットで検索しましたが、インクルードしたスクリプトから変数にアクセスしたり、モジュールから変数を抽出したりできる例しか見つかりませんでした。しかし、それは私が望むものではありません。

global $var1, $var2親スクリプトの変数を使用するために etc を使用する PHP のようなキーワードはありませんか?

あらゆる例、ドキュメント、または記事が受け入れられます。基本的には、それを達成するのに役立つものであれば何でも構いません。

4

2 に答える 2

38

our次のキーワードを使用してグローバル変数を宣言できます。

our $var = 42;

各グローバル変数には、どこからでもアクセスできる完全修飾名があります。完全な名前は、パッケージ名に変数名を加えたものです。その時点でまだパッケージを宣言していない場合は、 packagemainにいます。これは、先頭の に短縮できます::。したがって、上記の変数には名前があります

$var       # inside package main
$main::var # This is most obvious
$::var     # This may be a good compromise

別のパッケージを使用していた場合、プレフィックスは変更されます。

package Foo;
our $bar = "baz";
# $Foo::bar from anywhere,
# or even $::Foo::bar or $main::Foo::bar

接頭辞なしで変数を使用したいが、他のパッケージの下で使用したい場合は、それをエクスポートする必要があります。これは通常、サブクラス化によって行われExporterます。@Davids の回答を参照してください。ただし、これは d されているパッケージからの変数のみを提供できuse、その逆ではありません。例えば

Foo.pm:

package Foo;
use strict; use warnings;
use parent 'Exporter'; # imports and subclasses Exporter

our $var = 42;
our $not_exported = "don't look at me";

our @EXPORT = qw($var); # put stuff here you want to export
# put vars into @EXPORT_OK that will be exported on request

1;

script.pl:

#!/usr/bin/perl
# this is implicitly package main
use Foo; # imports $var

print "var = $var\n"; # access the variable without prefix
print "$Foo::not_exported\n"; # access non-exported var with full name

( で宣言された) レキシカル変数myは、グローバルに一意の名前を持たず、静的スコープの外ではアクセスできません。また、 では使用できませんExporter

于 2013-05-09T23:09:08.017 に答える
5

これを行う最も簡単な方法は、独自のモジュールを作成することです。したがって、たとえば、変数へのグローバル アクセスが必要な場合は$foo and $bar、次のようにモジュールを作成できます。

# file:  MyVars.pm
package MyVars;

$foo = 12;
$bar = 117.8;

1;

次に、MyVars モジュールを使用する任意の perl スクリプトを使用して、これらの変数にアクセスできます。

# file:  printvars.pl
use MyVars;

print "foo = $MyVars::foo\nbar = $MyVars::bar\n";

出力:

foo = 12
bar = 117.8
于 2013-05-09T22:47:14.670 に答える