質問
私はいくつかの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
は、ブロック内のアクセス可能な変数です。 「静的」変数をシミュレートするために使用されます。あなたは同じ結果を持っているキーワード state
のキーワードを使用することができたPerl 5.10から開始します:
## Starting from Perl 5.10 you can specify "static" variables directly.
sub Somesub {
state $somevar;
}
他のヒント
use Foo
またはrequire()
でモジュール「foo」をロードすると、perlは通常のスクリプトのようなFoo.pm
ファイルを実行します。これは、モジュールが正しくロードされた場合、それは真の値を返すように期待しています。 1;
はそれを行います。それはちょうど、同様2;
または"hey there";
することができます。
$somevar
の宣言と機能Somesub
周りのブロックは、変数のスコープを制限します。そうすれば、それはSomesub
からのみアクセス可能であると(それは関数本体内で宣言された場合はケースになり)Somesub
を呼び出すたびにクリアされません。このイディオムは、状態を持っているのperlの最近のバージョン(5.10以上)に取って代わられましたキーワードます。
モジュールは、真の値を返すことがあります。 1
が真の値である。
Perlモジュールが真と評価何かを返す必要があります。そうでない場合は、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 のます。
中括弧は、ローカル変数$ SOMEVARの範囲を限定ます:
{ 私の$ SOMEVAR。 ... }の#$ SOMEVARのスコープはここで終了。
私は、Perlについて多くを知らないが、通常、あなたは、中括弧を使用してスコープを作成します。おそらく$ SOMEVARは、グローバルに利用できるようにshoudln't?