2016-07-03 12 views
2

以下のコードでは、lastはwhileループで何をしますか? $matrix[$i][$j]{pointer}の変数が"none"の場合、lastが呼び出されますが、それは何ですか?Perlでは "最後に"何が行われますか?

なぜ$行列変数にはスコアと中カッコを使用するポインタが含まれていますか? {score}、私は配列の3次元としてこれを読んでいますが、これは別のものですか?これについてGoogleでは何も見つかりませんでした。ありがとう! lastコマンドの

my @matrix; 
$matrix[0][0]{score} = 0; 
$matrix[0][0]{pointer} = "none"; 
#populate $matrix with more stuff 

while (1) { 
    last if $matrix[$i][$j]{pointer} eq "none"; #<-what is this "last" doing? 
    #do some more stuff here 
} 
+3

これはPythonではありません。私はそれがPerlだと思う。 – GingerPlusPlus

+0

はなぜ私のグーグルが働いていないのか理解しています。 – joshweir

答えて

8

利用可能な用途:

  • 最後LABEL

  • 最後

  • 最後のEXPRよりますPerlのdocumentationへ:

    lastコマンドは、C( ループ内で使用されるような)でbreakの文のようなものです。問題のループを直ちに終了します。 LABELが である場合、コマンドは最も内側のループを参照します。最後の PERR形式は、Perl 5.18.0から使用可能で、実行時に へのラベル名を計算することができます。それ以外の場合は、最後のLABELと同じです。 、実行されないあれば、ブロックを続ける:{}

    LINE: while (<STDIN>) { 
         last LINE if /^$/; # exit when done with header 
         #... 
        } 
    

    最後は、評価 として{}、サブ{}の値を返すブロックを終了するために使用することができない、または実行grepを終了したり、 オペレーションをマップするために使用すべきではありません。ブロック自体は、一度だけ実行する ループと意味的に同じであることに注意してください。したがって、lastは、そのようなブロックの早い出口である を実行するために使用できます。

  • 1

    すでにlastについての回答を得ているので、私はあなたの質問の第2部分に取り組んでいきます。 Perlには、配列とハッシュテーブル(辞書とも呼ばれます)があります。上位レベルの@matrixは配列ですが、別の配列で初期化され、その2番目の配列の要素がハッシュテーブルで初期化されています。

    あなたがこれをプリントアウトするデータ:: Dumperを使用、またはJSONとしてそれをエクスポートした場合、あなたが何か見たい:あなたは答え、およそlastを持っていますが、私はこれを共有したいと思っ

    @matrix= [ 
        [ 
        { score => 0, 
         pointer => 'none' 
        } 
        ] 
    ] ; 
    
    4

    nextlastredoはPerlで論理フローにどのように影響するかを示す画像がループ:

    enter image description here

    continueブロックは、必要に応じてTを添加することができますループの状態を再評価するためにループを上に戻す前に、各反復で実行されるいくつかのステートメントを定義するループ。ブロックがcontinueでない場合、nextはループ状態にまっすぐに戻ります。

    関連する問題