この章では配列について説明します。
普通の$bookのような変数は1つしかデータを入れることができません。
つまり、変数は他のデータを入れようとするとデータが上書きされてしまいます。
それに対して配列は複数のデータをまとめて入れることができます。
複数のデータを扱う場合、変数では以下のように別々の変数名でそれぞれのデータを入れなければいけません。 配列を使うと以下のように1つの配列名@animalで複数のデータを入れることができるのです。 @animalの中にはがお互い関係性を持って存在していると言えます。
この例のように同じ目的で使用するデータは1つにまとめてしまい、1つの配列で複数のデータを管理できると便利です。
このような時に配列を使用します。 配列を扱う時には配列名の前にアットマーク@ を付けます。
そして右辺はカッコの中をカンマで区切って要素を入力していきます。
例えばのようにデータをカッコで囲んで、カンマ区切りで複数のデータを作っていきますが、このようなデータをリストと言います。そのリストを左辺の配列名に入れます。例えば以下のように作成します。この配列に入っているデータは「添え字」といわれるもので管理します。
添え字とはデータが保管してある場所の概念で、0から番号が付けられていきます。
例えばコインロッカーには番号が付いていますが、番号が付いているからこそ、どこに自分の荷物があるのか分かりますが、これと同じで配列のデータは添え字で管理します。 この$animalの右についてる[0]や[1]が添え字です。
リストの中の個別のデータを指し示すためには@animal[0]ではなく$animal[0]と書きます。
つまり、先頭の記号は@ ではなく$です。
例えば「print $animal[0];」で出力すると「猫」が出力できます。先ほども説明しましたが、添え字は0から順番に番号が付けられていきます。
配列の一番先頭のデータに対応する添え字は1ではなく0です。
ではを例に取って配列について、さらに詳しく説明します。 上の配列文は以下のように書く事も出来ます。 qwはデータ間をスペースやタブなどの空白文字で区切ったリストを作成する演算子です。
qw演算子の中の文字列はシングルクォートで囲まれたものとみなされるので、文字列を囲う必要はありません。
@animal1と@animal2のリストから、新しい配列@animal3
を作成しています。
結果はです。 以下の例のように新しい配列@animal3を作成した後に@animal1や@animal2の内容が変化しても@animal3には影響しません。
以下の例のように@animal3を作成した後に@animal2に龍を加えても、@animal3には影響がありません。
結果は変わらず「猫 犬 ライオン 象 ネズミ コアラ ネッシー」です。 例の中のコメントのしてある箇所はと同じことを意味しています。
リストの中にある「..」を範囲演算子と言います。
例えば(1..100)は1から100までを意味しています。
実際、1から100までをリストに書いていくことは効率が良くないので、このような場面で範囲演算子を使用します。 添え字は0から順番に番号が付けられていきます。
2つの配列の対応関係を図にしたので参考にしてみてください。 もっと詳しく対応関係を説明しますと以下のようになります。 以下の構文でも配列の要素にデータを入れることが出来ます。 今までは以下のように1個1個配列に値を入れていましたが、上の配列の基本構文でも配列にデータを入れることが出来ます。 先ほどの構文では以下のようにデータを入れていきます。 これはリストを使ったデータの代入の仕方です。
この構文であれば右辺のリストの要素を一気に左辺の変数に代入することが出来ます。
右辺のリストの要素数のほうが、左の変数より多い場合は、余った値は捨てられます。
では例をみてみましょう。 結果は「猫犬」です。
この例の場合は余った狸は捨てられます。
逆に右辺のリストの要素数のほうが、左の変数より少ない場合は余った変数には未定義値であるundefが代入されます。
undefとは変数などが未定義な状態を言います。
undefは何も入っていないのでprintで出力しても画面には現れません。 基本構文は以下の通りです。 では例をみてみましょう。 この例では猫が$aに,犬が$bに,ライオンが$cにそれぞれ入ります。
結果は「猫,犬,ライオン」です。
この例はリストを使った以下の方法と同じ意味です。配列のデータを変更するにはやのように新たなデータを代入するだけです。
これで古い要素である猫、犬が上書きされて新しいデータであるキリン、パンダに上書きされます。 配列の要素を出力するには以下の構文で書きます。 では例をみてみましょう。
以下の通り、添え字に相当するデータを取り出すことが出来ます。
次は配列全体の要素を出力する方法について説明します。 今までは個別に
print $animal[1];
print $animal[2];
と出力していましたが、配列の要素を一気にすべてを出力させたい場合には以下のように記述します。 この2種類の出力方法の差は何かといいますと配列をダブルクォートで囲んでいるか、囲んでいないかの差です。
結果は以下のようになります。 ダブルクォートで囲んだ方はデータ間がスペースで区切られます。
ダブルクォートで囲まないとデータ間にスペースが生まれないので、連なって出力されます。 例えば下の配列を初期化したい場合、つまり要素を消したい場合は以下のようにカラのリストを代入します。
空にしますとそれ以降は出力することはできません。
月: 2015年5月
ヒアドキュメントを使おう
この章ではヒアドキュメントについて説明します。
ヒアドキュメントは何列もの長い文字列を出力する時やHTMLのタグを出力する時に便利な方法です。
例を見てみましょう。 ヒアドキュメントの基本構文は以下の通りです。 「任意の名前」の箇所は自由に名前を付けてください。
ヒアドキュメントを使わないのであれば以下のようにprint文を3個も書かなくてはなりません。
このようなときにヒアドキュメントで記述すると簡潔にプログラムを書けます。 例のようにヒアドキュメントはprintで直接出力するか、もしくは一度$languageなどの変数に入れてから、後でprintで出力するかのどちらかです。 ヒアドキュメントにはいくつかのルールがありますので、順番に説明します。 初めのヒアドキュメントの名前の横にセミコロンを付けるのを忘れないでください。
また、先頭のヒアドキュメント名をダブルクォートで囲むと変数が展開されるのですが、シングルクォートで囲むと変数が展開されません。 終わりの「EO」の前後にスペースを空けてはいけません。
必ず行頭に書いてください。
また次のようにコメントを付けるのもエラーです。 次にHTMLのタグを出力する方法について説明します。
ヒアドキュメントはHTMLのタグを出力するのに便利な方法ですが、ヒアドキュメントを使わないと以下の通りHTMLのタグをすべてという形式で出力しなくてはいけません。
また、HTMLのタグを出力するにはCGIヘッダーをと書いてください。 以下のようにHTML全体をヒアドキュメントに入れてしまうとと書く必要が無いので楽に書けます。
加算子,減算子について知ろう
この章では加算子,減算子について説明します。
加算子は数値を1つ増やし、減算子は数値を1つ減らす演算子です。
加算子は減算子はで表示します。
まだ説明していませんがfor文などの繰り返し構文等に主に使われます。 では例をみてみましょう。
初めに前置加算子から説明します。 「++$a」は「$a=$a+1」と同じことを意味しています。
つまり「$a+1」を計算してから、左辺の$aに結果を代入するのと同じ事なので、の出力結果はになります。
$aはこの時点で9に変化しているので、の結果はになります。
次は後置加算子について説明します。 初めに$a に代入されている8をで出力しているので、結果はとなります。
この後に$a に1を加えるのではになります。
次は前置減算子について説明します。 は「$a=$a-1」と同じことを意味しています。
つまり「$a-1」を計算してから、左辺の$aに結果を代入して、printで出力していますので、の出力結果はになります。
$aはこの時点で7に変化しているので、の結果はになります。
次は後置減算子について説明します。 まず初めに$a に代入されている8をで出力しているので、結果はとなり、その後に$a から1を引いているのでの箇所はになります。
Perlで計算をしよう
この章ではプログラムで計算する方法について説明します。
Perlでの数値は整数や小数点など普段使用している数値と同じものです。
その数値でプログラムの中で計算を行うことができます。
Perlでの数値は大きく分けると整数と実数に分けることができます。実数は浮動小数点数と呼ばれています。
浮動小数点数とは「9.1」など小数点で表される数値です。
整数は10進数だけではなく2進数、8進数、16進数があります。
10進数は、普段、我々が使用している100や10などの数字です。
8進数の場合は先頭にを付けて記述し、16進数の場合は先頭にを付けて記述し、2進数の場合は先頭にを付けて記述します。
では例を見てみましょう。 2進数で100を表すと
「0b1100100」
8進数で100を表すと
「0144」
16進数で100を表すと
「0x64」
になりますが、print文で出力します
とすべて10進数になって出力されます
つまり、100が出力されます。
ではPerlプログラムで計算を行ってみましょう。
Perlプログラムでの計算方法は普通の算数と同じ計算方法です。
「+」は足し算、「-」は引き算、
「/」は割り算、「*」は掛け算、
「%」は割り算の余りを求めます。
では例をみてみましょう。
ここで優先順位について説明します。
の場合には掛け算を計算してから、足し算を計算しますが、これは普通の算数の法則と同じです。
それは掛け算の方が足し算より優先順位が高いという法則です。
優先順位を変えるにはと、先に計算を行いたい箇所に括弧を入れます。
これと同じようにPerlプログラムの中にある演算子同士でも優先順位が存在します。 優先順位が同じの場合には左側から評価、実行されます。
ですので、以下のように計算式の括弧を外しますと初めに左側が結合してしまうので、計算することが出来なくなってしまいます。 括弧を付けることでその個所の優先順位が高くなるので、そこから結合、実行されていきます。
では以下の掛け算や割り算の場合にはどうかと言いますと計算式に括弧を付けなくても掛け算や割り算の方が文字列連結演算子より優先順位が高いので、計算式に括弧を付けた時と同じ結果になります。では次の箇所の説明をします。
例のプログラムの最後にある$aと$bの値のはダブルクォートで囲ってあるので、一見数字に見えますが文字列です。 ではなぜ、文字列同士なのに足し算が出来るのか疑問に思いませんか?
普通、計算が出来るのは数字だけです。
Perlは足し算などの計算関係の演算子の両辺には数字が来ることを期待しているので、数字らしき文字列を見付けた場合には数字に自動変換してくれるので、結果はになります。
では以下の例のように足し算などの計算関係の演算子の両辺に数字とは関係ないものがあったらどうなるでしょうか? 結果は0が表示されます。
計算できないようなものは0で計算されます。
エスケープシーケンスについて知ろう
この章ではエスケープシーケンスについて説明します。
エスケープシーケンスとは、ダブルクォートやシングルクォートなど文字列として入力することが出来ない特殊な文字をを使って表現します。
テキストディタによってはという表記になっています。
シングルクォート内で使うことが出来るエスケープシーケンスはだけです。
後はダブルクォートの中で使用します。 では例をみてみましょう。
と、ダブルクォートを含めて出力させたいと思って以下のように書いてもエラーが出ます。 これはダブルクォートがPerlでは文字列を囲むという特殊な意味を持っているからです。
つまり、以下のようにダブルクォートの関係性を捉えているからです。
ですので、ダブルクォートをとして使いたい場合にを入れます。 このようにを入れればエラーにならないでと、出力されます。
次の例をみてみましょう。結果は以下のようにタブが挿入されます。
次の例をみてみましょう。
PerlではHTMLのタグもprintで出力できるのですが、以下のようにHTMLの属性の値をダブルクォートで囲んでもエラーになります。 なぜなら、ダブルクォートの対応関係を以下のようにPerlでは捉えているからです。
つまりの部分は文字列なのに、ダブルクォートで囲まれていないと捉えているのです。 ですので、以下の赤枠のダブルクォートをでエスケープしてください。
これでPerlはこのダブルクォートはHTMLの値を囲んでいるのであって、Perlのダブルクォートとは関係ないと解釈してくれます。 補足ですが、HTMLタグを出力するときには以下の枠の箇所をからに変えてください。 次の例をみてみましょう。 $catsの前にが付いていますが、これで変数自体の機能がなくなって、ただの文字$に戻りますので結果はになります。
プログラムにコメントを書き込もう
Perlの基礎を知ろう
この章ではPerlの基礎について説明します。 プログラムは基本的には先頭から順番に実行されていくというのが基本です。 プログラムを書く前にTeraPadであれば表示メニューの中の編集モードをPerlにしてください。
書き終わりましたらファイルを保存しますので、TeraPadの「ファイル」の中のをクリックします。
クリックしますと以下のダイアログボックスが開きますので文字コードを「UTF-8N」を選択してOKを押してください。 OKを押しますと以下のダイアログボックスが開きますので、ファイル名に好きなファイル名を入力します。
この時、拡張子は必ずにしてください。
つまり、と書きます。
そして、ファイルを保存する場所はです。 保存しましたら、ブラウザのURLを入力する箇所に以下のように入力します。
ファイル名は自身で決めたファイル名を入力します。 実行するとブラウザにプログラムの内容を表示させることが出来ます。
表示する時に文字化けが起こるのならばブラウザのエンコードが他の文字コードになっていますので、これを変更します。
windows7の場合で説明しますと初めに画面の上で右クリックします。クリックしますとメニューが開きますのでその中のエンコードをに変更してください。
これで文字化けは直ります。
では先頭から解説します。 「c:/perl/bin/」の場所にプログラムを翻訳してくれるActivePerlがあることを示しています。
レンタルサーバを借りて、webページを動かすときにはレンタルサーバの業者により、ここの記述は違うので、Perlのパスを確認してください。
例えば以下のサーバー業者ではサイトのQ&Aに書いてあります。 ここはCGIヘッダーと呼ばれる部分でCGIプログラムを実行する場合、初めにCGIヘッダーを送る規則になっています。
「Content-type」の右側は送信されたデータがどのような内容のものなのかを示しています。
この例のようにテキスト形式(文字情報だけ)で出力するのであればを指定します。
HTML文書として出力したい場合、以下のようにを入力します。
つまり、CGIヘッダーはこれから送るのはテキスト形式ですよ。
もしくはHTML形式ですよと宣言する役割を持っています。
「text/html」の例は以下の通りです。 $cats, $number1 ,$number2など文字の先頭に$が付いた形式をスカラー変数もしくはただ単に変数と呼びます。
スカラーとはやなどのことを言いますが、そのスカラーというデータを入れている変数なので「スカラー変数」と呼ばれているわけです。
次に変数について説明します。
変数とは何かしらのデータを入れる箱みたいなものです。
バッグを例に取るとバックには財布やハンカチを入れて持ち運びますが、そのバックに当たるものが変数です。
そして、このバッグに入っている財布やハンカチがデータに該当します。
もしくは、変数とはフロッピーディスクみたいなもので、その中にデータを記憶させておくことが出来ます。 変数には名前を付けなくてはいけないのですが、この例でいいますとcats、number1 、number2が変数名です。
$と変数名が付いた形式で初めて変数になります。
この例では変数名にcats、number1 、number2と付けましたが、名前を付ければ何でもいいというのではなく、一定のルールがあります。
1つ目は$の次の1文字目は数字で始めることはできません。
例えば$3catsという名前は付けることはできません。
2つ目は$の次の1文字目は
「アンダースコア(_)」
「aからz」「AからZ」が使えます。
3つ目は$の次の次からは
「アンダースコア(_)」
「aからz」「AからZ」、
「数字」が使えます。
4つ目は同じ文字でも大文字と小文字は全く別の変数になります。
例えば$catsと$CATSは全く違う変数になります。
また、変数名には「入れるデータに関連した名前」にして誰が見てもわかりやすくしましょう。
猫に関連しているのなら$catsなどと付けます。
次に変数へのデータの入れ方について説明します。
例の「$cats=”三毛猫”;」に「=」と言う記号がありますが、これを代入演算子と言います。数学のイコールとは関係ありません。
代入演算子は右辺のデータを左辺に入れる役割があります。
例で説明しますと$catsと言う変数にと言うデータを入れるという意味です。
このデータを入れる行為を「代入」と言います。
注意してほしいことは同じ変数に他のデータを代入してしまうと後から代入したデータで上書きされますので注意してください。
例えば以下の例では「三毛猫」を「どら猫」で上書きしてしまいます。 次はシングルクォートとダブルクォートについて説明します。
「三毛猫」「犬」のような文字列を変数に代入するにはもしくはで文字列を囲まないといけません。
ダブルクォートもしくはシングルクォートで囲まれたものは文字でも数字でもすべて文字列になります。
例えばダブルクォートもしくはシングルクォートで文字列を囲まないでのように書きますとエラーになります。
のように数字を変数に代入する場合にはダブルクォートもしくはシングルクォートで数字を囲む必要はありません。
次に文の末尾のセミコロンについて説明します。 文の終わりにセミコロン「;」が付いていますが、これは日本語の文章の「。」と同じ意味で、文の終わりを意味します。
文の終わりにはセミコロンを必ず付けてください。 「print」という文字がありますが、これは文字列を出力する関数です。
関数とはエクセルを学習したことがある人はわかると思いますが、Perlの関数の仕組みはエクセルの関数の仕組みと意味は同じです。
例えばエクセル関数にSUMと言う関数が有りますが、この関数は指定した範囲のデータに基づいて足し算を行う関数です。
例えば指定した範囲のデータが3,5,7であるならば結果は15です。
SUMには初めから指定した範囲の足し算を行うと言う仕組みが備わっています。
つまり、エクセルの内部機構でSUMの機能は指定した範囲の足し算を行うと言うプログラムがされていると言うことです。
これが関数の意味です。
Perlにもあらかじめ機能が決められている関数が有ります。
その数多くの関数の中の一つがprint関数ですが、この関数には「文字列を出力する機能」がPerlの内部機構により初めから決められています。print関数は以下のように括弧で囲んでもいいです。
つまり括弧があってもなくてもどちらでもいいです。 次に文字列の中に変数を入れるときの注意点について説明します。
のように文字列の中に変数が含まれている場合はダブルクォートで文字列を囲ってください。
ダブルクォートで囲うことによって、変数の中に入っている値を表示させることが出来ます。
これを変数展開と呼びます。
この例の場合は$catsの中に代入されている三毛猫と$number1に入っている2、そして$number2に入っている3が出力されます。
つまり、 を出力しますと
三毛猫を2匹飼っています
三毛猫を3匹飼っています
と出力します。
上の例のは改行を意味しています。
例えばを外しますと
のように改行しないで出力されます。
また、文字列が含まれていない、つまり変数だけののような文の場合には変数をダブルクォートで囲う必要はありませんが、以下のようにダブルクォートで囲っても問題ありません。 では次のように変数が含まれている文字列をシングルクォートで囲んだらどうなるでしょうか? 結果はという文がそのまま出力されます。シングルクォートは囲ったものをそのまま表示します。
つまり、$catsに代入されている三毛猫と言う文字と$number1に代入されている2と言う数字が変数展開されなくなるので注意が必要です。
ここで気を付けてほしいことを説明します。
例えば以下の例のようにに変えて出力させようと思っても結果はとなってしまいます。
原因は$number1hikiが変数として認識されてしまうからです。 これを正しく出力させるために書き換えますと以下のようになります。 解決方法は変数名をで囲んでください。
これで正しくと出力されます。
では今度はprint文を今までとは違う形で書く2つの方法について説明します。 今までは上の例のように文全体をダブルクォートで囲んでいましたが、これを別な方法で書き換えると以下のようになります。 この書き方はドット「.」で文字列と文字列を連結する方法です。 このドットは「文字列演算子」と言いまして、ドットの右辺と左辺の文字列を連結する働きがあります。
ここで少し疑問に思った人がいるかもしれませんが、ドットは文字列同士を連結する演算子なのに$number1には数字の2が入っています。そこでPerlは数字の2を文字列のに自動的に変換します。
これは文字列連結演算子を使う場合にはドットの右辺と左辺の値を文字列として扱うためです。 変数と文字列の間をカンマ「,」で区切る方法です。
この方法は変数と文字列の間だけではなくて、変数と変数の間をカンマで区切ることもできます。
テキストエディタをダウンロードしよう
Perlプログラミングの環境を設定しよう
前章で「ブラウザからWWWサーバに渡されたプログラムがCGIプログラムであればPerlソフトがそのプログラムを処理します」と書きましたが、そのPerlソフトであるActivePerlというActiveState社が開発したソフトウェアをダウンロードします。
また、WWWサーバはソフトウェア財団が開発を進めているApacheを使用します。
Webサーバはブラウザーからの要求に対して、要求通りのファイルを返す機能を持ちます。
初めに「ActivePerl」をダウンロードしますので、以下の手順通りに進んでください。
1
http://www.activestate.com/のサイトに入ります。
2
サイトに入りましたら、PerlタブからActivePerlを選択してBusiness Editonをクリックします。 3
Business Editonの中の「Free Downloads」をクリックしてください。 4
次に以下の箇所のどちらかをクリックします。 バージョンは変わる可能性があるので最新のものをダウンロードします。 5
次に以下の画面が表示されますので、Nextを押してください。 6
「I accept……」にチェックを入れてNextをクリックします。 7
ここではインストールするディレクトリを選択するのですが、このままNextをクリックします。 8
この画面ではこのままNextをクリックします。 9
Installをクリックしますとインストールが始まります。 10
インストールが終了したのでFinishをクリックします。
これでインストール終了です。 11
これでインストールは終わりですので、パソコンを再起動してください。
次はApacheのインストールの仕方を説明します。
順番通りに進めてください。
1
http://httpd.apache.org/のサイトに入ります。
2
サイトに入りましたら、左メニューの中のをクリックしてください。 From a Mirrorをクリックしましたら、少し下にスクロールして以下の赤い箇所であるをクリックしてください。今回はこれをインストールしますが、バージョンは更新していくので、その時の最新版をダウンロードしてください。 3
2の箇所をクリックしますとインストールが始まりますので、「Next」をクリックします。 4
次に「I accept……」にチェックを入れて「Next」をクリックします。 5
次にApacheについての説明が書いてありますので、読みましたら「Next」をクリックします。 6
「Network Domain」「Server Name」には「localhost」と入力し、には自身のメールアドレスを入力して,「Next」をクリックします。 7
「Typical」にチェックを入れて「Next」をクリックします。 8
ここではインストール先のフォルダを決めるのですが、変更しますので「change」をクリックします。「change」をクリックしますと以下のダイアログボックスが開きますので「Folder name」にと入力して,OKをクリックします。
「OK」をクリックしますと8の画面に戻りますので「Next」をクリックします。 9
次に「Install」をクリックしますとインストールが始まります。 10
インストールが終わりましたら「Finish」をクリックします。
11
これでインストールは終わりましたが、CGIのプログラムを動かすためには「httpd.conf」と言うファイルの設定を変更しなくてはいけません。
「httpd.conf」はの中にあります。 ファイルの設定を終えましたら、Apacheを再起動してください。