2. Perl6-変数の操作、匿名ブロック
この記事では、条件ステートメントとループを検討し、それらの使用に関するいくつかの小さな実験を行います。
Perl 6の上記のステートメントは、実行のために必ずブロックを受け取る必要があります。1つの式のみを実行する必要がある場合でも、ブロック内で渡す必要があります。 }
- 条件付きステートメント
条件文の1つはifで、その一般的な外観は次のようになります。
if () {} elsif (1) {1} elsif (N) {N} else {}
スカラー変数に保存されたブロックは転送できませんが、保存されたブロックの実行時に命令を渡すことができます:{$block();}
条件を囲む括弧はオプションです。
次の条件ステートメントは、ただし、condition1がfalseの場合はBlock1を実行し、それ以外の場合はOtherBlockでない限り、
unless (1) {1} else {}
ただし、ブロックではなく、単一の演算子を使用できる構造があります。
if ; unless ;
現在のタスクでいくつかの簡単な手順を実行し、同様の方法でそれらを作成する必要がある場合は、デザインを使用して指定できます
(1; 2;) if ;
次の構成を書く場合
my $var = ( if ($i==0 { 1+1; } )
次に、最後の計算式が変数$ varに入力されます。この場合、$ iがゼロの場合、計算値は2になり、$ iがゼロに等しくない場合、計算値はNil(同じタイプNil)になります
別のタイプの条件ステートメントは、選択ステートメントです。
given $value { when 'str1' {1} when 40 {2} when 'str1' {3} default {} }
最初の比較が成功すると、指定された演算子は作業を停止します。つまり、Block3は実行されません。
比較は、それらが示されている順序で行われます。後の後に何かを置くと、比較は決して到達しません。 デフォルトの後、ステートメントは実行を停止します。
- サイクル
このグループのステートメントの1つはwhileです。条件が満たされるまで指定されたブロックを実行します
$i = 0; while ($i<10) { $i++; }
このループは、0〜10のすべての値を反復処理します。条件を囲む括弧はオプションです。
次のステートメントは、until:条件がtrueになるまで指定されたブロックを実行します。
$i = 0; until ($i>=10) { $i++; }
このサイクルは、前のサイクルと同じことを行います。
条件と同様に、建設が可能です
say $a++ while $a<10; ($a++; say $a) until $a>9;
次のループステートメントの形式は
loop (; ; ) {}
初期条件ブロックでは、変数の初期値が設定され、終了条件では、ループの次の反復を開始するかどうかを決定する式が指定されます。ループの変数の変更には、各反復の終了時に実行される式が含まれます。
loop (my $i=0; $i<10; $i++) { say $i; }
loop (my ($i, $f) = (0,0); $i<10 && $f<5; $i++, $f++) { say $i, ' ', $f; }
loop (my $i=0; $i<10; ($i+=2; $i--)) { say $i; }
forループ演算子は、配列のすべての要素またはそれに渡されるリストを反復処理するために使用されます。
for @mas, @mas2, 'string' 20, True -> $elemList {}
各反復で、このアイテムのエイリアスである$ elemOfMas変数を介してリストアイテムにアクセスできますが、この変数を使用してリストアイテムの値を変更することはできません。 リスト項目を変更できるようにするには、「->」の代わりに「<->」を使用します
すべてのループ文に対して、next(次の反復を開始)、redo(次の反復に戻る)、last(ループを停止)を使用できます。
事後条件でサイクルを開始することができます。
repeat {} while ();
そして
repeat {} until ($x >= 10);
また、概要では、デザインを書くことが可能であると述べられています
repeat while () {};
ただし、最新バージョン(12.09)では、この設計でエラーが発生しました。