この章ではfor文の入れ子について説明します。
for文の応用でfor文の入れ子について説明します。
for文の入れ子とはfor文の中にfor文を入れると言うことです。
では例をみてみましょう。つまり、最初は$iには1が入っているので、print文の中の$iには1が入ります。
そして、外側のfor文が1周するごとに中のfor文は3周します。
カテゴリー: Perl
for文について知ろう
この章ではfor文について説明します。
while文は何回も同じ処理をする必要があるときに必要でしたが、for文もwhile文と同じ働きがあります。
forが最初に実行される時にはから始まります。
初期値式とは条件式を判定するときの初めの変数です。
初期値式は下の例で言えばです。
次に初期値式を元に条件式を判定してTRUEであるならば、処理文が実行されることになります。
条件式は下の例で言えばです。
処理文が実行された後に増減式において、初期値を足したり引いたりする行為を行います。
増減式は下の例で言えばです。
プログラムの内容によってはなどの記述もできます。
そして、その増減式の結果を元に、また条件式を判定してTRUEならば処理文を実行するという行為を繰り返します。
例を元に詳しく説明します。 初期値は1ではなくても2でも3でも自由に決められます。
$iは3以下でTRUEなので、を実行し、を出力します。
ですのでを実行し、を出力します。
ですのでを実行し、を出力します。
次の例を見てみましょう。
この例は配列の要素の合計を計算しています。
このように配列の要素をforeach文だけではなく、for文でも取り出すことができますので、覚えておいてください。
do-until文を知ろう
この章ではdo-until文について説明します。
普通のuntil文では条件式がTRUEならば1度も実行されることもなく終了してしまいますが、では最初に1回繰り返し処理文を実行します。
そして、処理文を実行してからの条件式の判定に入りますが、条件式がFALSEの間、処理文が実行されます。
では例をみてみましょう。
until文と違ってここでは条件式の判定はないのでを実行して、1を出力します。そして下の2に進みます。
$iは上の2番の$i++の箇所で1が足されて2になっていますが、FALSEなので下の4番に進みます。
$iは上の5番の$i++で1が足されているので3になっていますが、まだFALSEなので下の7番に進みます。
$iは上の8番の$i++で1が足されているので4になっていますが、まだFALSEなので下の10番に進みます。
until文を知ろう
この章ではwhileとは機能が逆のuntil文について説明します。
while文は条件式がTRUEの時にブロック内を実行しますが、untilは条件式がFALSEの時にブロック内を実行します。
初めにuntilの条件式がTRUEなのかFALSEなのかをチェックしますがFALSEである場合にはuntilの処理文が実行され、TRUEである場合にはuntilの処理文は実行されません。では例をみてみましょう。
until ($i> 4)の条件式をif文と同じようにTRUEかFALSEで判定しますが、FALSEですのでを実行して、1を出力します。
TRUEであるならば何も出力されません。そして下の2に進みます。
$iは上の2番の$i++で1が足されているので2になっています。
そしての条件判定に入りますが、まだFALSEですのでを実行し、2を出力します。
$iは上の4番の$i++で1が足されているので3になっています。
そしての条件判定に入りますが、まだFALSEですのでを実行して、3を出力します。
$iは上の6番の$i++で1が足されているので4になっています。
そしての部分の条件判定に入りますが、まだFALSEですので、を実行し、4を出力します。
$iは上の8番の$i++で1が足されているので5になっています。
そしての条件判定に入りますが、ここで初めてTRUEになりますのでループを終了します。
結果は「1234」です。
上の例をwhileで書き直してみると以下のようになります。
do-while文を知ろう
この章ではdo-while文について説明します。
while文とほとんど働きが一緒ですが、while文は条件式がFALSEであるならば1度も実行されることもなく終了してしまいますが、do-while文では必ず1回は処理文を実行します。
処理文を実行してから条件式の判定に入ります。
処理文を実行してから、の条件式の判定に入ります。
条件式がTRUEの間は繰り返し処理文が実行されます。
では例をみてみましょう。
while文と違って初めに条件式の判定はないので を実行して、1を出力します。 そして下の2に進みます。
$iは上の5の$i++で1が足されているので3になっていますが、3はまだ4未満なのでTRUEになります。
while文を知ろう
この章ではwhile文について説明します。
何回も同じ処理(ループ)を実行する必要があるときにwhile文を使えば簡単に出力することができます。
同じような処理を何度も繰り返すプログラムを書く場合、以下のように何度も同じ処理を書くのは面倒ですし、間違いも多くなりがちです。
そこでwhileを使うと簡潔に書くことが出来ます。
while文は条件式がTRUEの間は繰り返しを行いますが、FALSEの場合には繰り返しを終了します。
if文の時に条件式の判定を行いましたが、while文の条件式の判定も考え方は同じです。
では例をみてみましょう。
ではwhile文の流れを説明します。
初めにwhileが実行される時に条件式がTRUEかFALSEかをチェックします。
TRUEである場合、whileの中身が実行されます。
FALSEである場合、whileの中身は実行されません。
whileは条件式がTRUEである限り何度でも中身を実行します。
while( $i < 4)の条件式をif文と同じようにTRUEかFALSEで判定します。
1は4未満でTRUEですのでを実行して、を出力します。
FALSEであるならば何も出力されません。
もし、$i++がないとどうなると思いますか?
答えは無限ループと言いまして、の条件部分が永遠に4以下にならないので無限に繰り返しを実行しますので気を付けてください。
次の例をみてみましょう。
whileと前の章で説明したeach関数を組み合わせることによって、ハッシュのすべての要素を取り出すことが出来ます。
以下の図のようにキーと値が順番に出力されていきます。
ハッシュに関する関数を知ろう
この章ではハッシュの要素に対して、様々な操作をする関数について説明します。
以下が主な関数です。 では例をみてみましょう。 ではkeysについて説明します。 ハッシュに含まれるキーだけを取り出すにはkeysを使用します。
keysはハッシュに含まれるすべてのキーをリストにして返します。
返されるキーには順番はなく、ランダムにリストに格納されます。
上の例では2つの方法でキーを出力しています。
1つ目の方法はforeachです。
foreachは配列の要素を取り出すのに使いますが、ここではハッシュに含まれるすべてのキーのリストを取り出すのに使います。
2つ目の方法はキーのリストを@keyに入れて、printで出力しています。
では次の例をみてみましょう。 ハッシュに含まれる値だけを取り出すにはvaluesを使用します。valuesはハッシュに含まれるすべての値をリストにして返します。
返される値には順番はなくランダムにリストに格納されます。
先ほどの例では2つの方法で値を出力しています。
1つ目はforeachです。
foreachは配列の要素を取り出すのに使いますが、ここではハッシュにあるすべての値を取り出すのに使います。
2つ目は値のリストを@valueに入れて、printで出力しています。
次は配列の章でも説明したsort関数について説明しますが、詳しくは配列の章のsort関数の説明を参考にしてください。 では例をみてみましょう。 キーを文字列で比較する場合にはcmpを使用します。
キーを数値として比較したい場合にはを使用します。
次はハッシュの値をソートする方法について説明します。
では例をみてみましょう。
値を数値で比較するので、を使用します。
次はeach関数について説明します。 each関数はハッシュに含まれるキーと値のペアを取り出して、キーと値のペアを返します。
ハッシュの最初のキーと値を取り出しています。
ハッシュは要素間の順番がないので、初めのが出力されるわけではないので注意してください。
では例をみてみましょう。
次はexists関数について説明します。
ハッシュの中に指定したキーが存在するかを確認します。
存在する場合はTRUEを返し、存在していなければFALSEを返します。
キーだけを調べているので、次の例のように値にデータが入っていなくてもTRUEを返します。
結果は「定義されています」です。
すべてのハッシュのキーに対して、存在するのかチェックしたい場合にはforeach文と一緒にif文でチェックを行います。
次はdefined関数について説明します。
defined関数は値が定義されている場合はTRUEを、定義されていない場合はFALSEを返します。
値がカラであるならばFALSEになります。
では例をみてみましょう。
この例ではの値がカラです。
その場合にはFALSEを返します。
FALSEなのでが実行されます。
次はdelete関数について説明します。
delete関数は引数に指定したキーと値を削除します。
戻り値は削除が出来たのならばその削除した値になります。 このようにprintで %nameの要素を出力することが出来ますが、ハッシュをダブルクォートで囲まないでください。
次はハッシュを初期化する方法について説明します。
ハッシュの要素を初期化するには、上の例のように空のリストを代入します。
ハッシュにカラのリストを代入することにより、ハッシュの要素がすべて削除されます。
「%name=();」でハッシュの要素を初期化したので、上の例を出力しようとしても何も出力されません。
ハッシュについて知ろう
この章ではハッシュについて説明します。
ハッシュは配列と似ていますが、普通の変数では1つしかデータを入れることができませんが、配列は複数のデータをまとめて入れることができます。
ハッシュも基本的な仕組みは同じです。
では配列とハッシュの違いは何でしょうか?
大きく違う点は配列は個々の要素を添え字で管理していましたが、ハッシュは文字列であるキーで個々の要素を管理します。
ハッシュを作成する方法は2種類ありますので、以下で説明します。 基本構文1の例をみてみましょう(スペースの都合上ハッシュを2行で書いています)。 基本構文2の例をみてみましょう。 ではハッシュについて説明をします。
ハッシュは添え字の代わりにキーで要素を管理します。
キーとはの箇所のことを言います。
値とはの箇所のことを言います。
ハッシュはキーと値をペアで関連付けして記述します。
キーと値の関連付けはという記号で行います。
つまり、は紺野は34歳、水野は32歳、清水は13歳という意味で,キーと値はお互いに関連付けして記述します。
ハッシュの要素を取得する基本構文はです。
この例の場合にはと書くことで34が出力されます。 配列の場合にはリストの先頭から添え字がと決められていました。
ハッシュの場合にはリストの中の要素は文字列であるキーで管理されているので、要素間には順番はありません。
3
1つのハッシュの中で同じキーを重複して使ってはいけませんが、もし間違って重複して使用してしまうと後で記述した値が前に記述した値を上書きしてしまいますので注意してください。
値は重複していても問題ありません。 すでにあるキーに対してのように新たな値を代入すると古い要素の値である34が上書きされて、新たな値である14に置き替わること
になります。
unless文を理解しよう
この章ではunless文について説明します。
unless文は条件式がFALSEの時に実行します。
if文とは条件の判定が逆になります。
最初にunless文と同じ意味の文をif文で書く方法について説明します。
先ほど「!」について説明しましたが、これはという否定を意味していました。
では例をみてみましょう。
$numberが123より小さい時という条件を否定しているのでが実行されます。
この例を書き換えると以下のようになります。
つまり条件式がFALSEの場合にprint文が出力されます。
これと同じことがunless文で書くことが出来ます。
この例も条件式がFALSEの時にprint文が出力されます。
この章では論理演算子について説明します。
if文にの章で関係演算子を説明しましたが、if文でもっと複雑な条件定義をしたい場合には論理演算子を使用します。
では例をみてみましょう。
条件式のの中でandを挟んだ両辺が TRUEの場合のみ条件式がTRUEになります。
つまり、もしくは の片方がFALSEの場合には条件式はTRUEになりません。
これが論理演算子のandの機能です。
結果は「$b==9」がFALSEなので、が出力されます。
次の例をみてみましょう。
andは$aと$bの両辺がTRUEの場合に条件式がTRUEになりましたが、orは$aと$bのどちらかがTRUEの場合に条件式がTRUEになりますので、この例の場合はがFALSEですが、条件式はTRUEになります。
結果はになります。
次の例をみてみましょう。
「!$a」と「$a==FALSE」は同じことを意味しています。
条件式であるの意味は$aがFALSEであるならば条件式はTRUEになると言う意味です。
ここで上のTRUEとFALSEの条件を見てみるとFALSEとは整数の0と書いてありますので、この例の場合は条件式はTRUEになります。
「!」を付けることで条件式がTRUEではない場合にTRUEになります。
条件式で真偽を調べるときに明示的にのようにFALSEやTRUEを使うことが出来ることを覚えておいてください。
もう一つ「!」の例を示します。
これは先ほどの例に「!」を付け加えたのですが、このように「!」を使うことで、実行結果が逆になります。
結果は「TRUEではありません」です。
次は論理演算子の順位について説明します。
では例をみてみましょう。
論理演算子が2つありますが、最初に実行されるのはandなので、あえて括弧で囲みますと以下のようになります。
orは両辺のどちらかがTRUEであれば条件式がTRUEになりますので、結果はになります。
また以下のようにorを中心に評価されるのではないことに注意してください。
つまり、から先に結びつくのではないということです
では次の例をみてみましょう。
「$b==2」 と 「$c==4」の結びつきが優先されますので、以下のような括弧の囲みにはなりません。