たとえば、次のコードに似たPerlモジュールをいくつか見つけました。
package MyPackage;
use strict;
use warnings;
use constant Perl510 => ( $] >= 5.0100 );
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( );
{ #What is the significance of this curly brace?
my $somevar;
sub Somesub {
#Some code here
}
}
1;
1;
と、$somevar
とサブを囲む中括弧の重要性は何ですか?
モジュールの最後にある1
は、モジュールがtrue
をuse/require
ステートメントに返すことを意味します。モジュールの初期化が成功したかどうかを確認するために使用できます。そうしないと、use/require
は失敗します。
$somevar
は、ブロック内でのみアクセス可能な変数です。 「静的」変数をシミュレートするために使用されます。 Perl 5.10以降では、キーワード state
キーワードを使用して、同じ結果を得ることができます。
## Starting from Perl 5.10 you can specify "static" variables directly.
sub Somesub {
state $somevar;
}
モジュール「Foo」を_use Foo
_またはrequire()
でロードすると、Perlは通常のスクリプトのように_Foo.pm
_ファイルを実行します。モジュールが正しくロードされた場合、真の値を返すことを期待しています。 _1;
_はそれを行います。 _2;
_または_"hey there";
_の場合もあります。
_$somevar
_の宣言と関数Somesub
の周りのブロックは、変数のスコープを制限します。このように、Somesub
からのみアクセス可能であり、Somesub
の呼び出しごとにクリアされません(これは、関数本体内で宣言されている場合に当てはまります)。このイディオムは、 state キーワードを持つ最近のバージョンのPerl(5.10以降)で置き換えられました。
Perlモジュールは、trueと評価されるものを返す必要があります。そうでない場合、Perlはエラーを報告します。
C:\temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test\n"; }
#1; # commented out to show error
C:\temp>Perl -e "use MyTest"
MyTest.pm did not return a true value at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
C:\temp>
「1;」を使用するのが通例ですが、trueと評価されたものはすべて機能します。
C:\temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test\n"; }
"false";
C:\temp>Perl -e "use MyTest"
C:\temp> (no error here)
明らかな理由 別の一般的な戻り値は42です。
http://returnvalues.useperl.at/values.html で維持されているクールな戻り値のリストがあります。
モジュールは真の値を返す必要があります。 1
は真の値です。
require のドキュメントから:
ファイルは、初期化コードが正常に実行されたことを示す最後のステートメントとしてtrueを返す必要があるため、このようなファイルは1で終了するのが通例です。それ以外の場合はtrueを返すことが確実でない限り。ただし、1を付けるだけの方がよいでしょう。 、ステートメントを追加する場合。
中括弧は、ローカル変数$ somevarのスコープを制限します。
{私の$ somevar; ...}#$ somevarのスコープはここで終了します
Perlについてはよくわかりませんが、通常は中括弧を使用してスコープを作成します。おそらく$ somevarはグローバルに利用できないのでしょうか?