この章ではヒアドキュメントについて説明します。
ヒアドキュメントは何列もの長い文字列を出力する時やHTMLのタグを出力する時に便利な方法です。
例を見てみましょう。 ヒアドキュメントの基本構文は以下の通りです。 「任意の名前」の箇所は自由に名前を付けてください。
ヒアドキュメントを使わないのであれば以下のようにprint文を3個も書かなくてはなりません。
このようなときにヒアドキュメントで記述すると簡潔にプログラムを書けます。 例のようにヒアドキュメントはprintで直接出力するか、もしくは一度$languageなどの変数に入れてから、後でprintで出力するかのどちらかです。 ヒアドキュメントにはいくつかのルールがありますので、順番に説明します。 初めのヒアドキュメントの名前の横にセミコロンを付けるのを忘れないでください。
また、先頭のヒアドキュメント名をダブルクォートで囲むと変数が展開されるのですが、シングルクォートで囲むと変数が展開されません。 終わりの「EO」の前後にスペースを空けてはいけません。
必ず行頭に書いてください。
また次のようにコメントを付けるのもエラーです。 次にHTMLのタグを出力する方法について説明します。
ヒアドキュメントはHTMLのタグを出力するのに便利な方法ですが、ヒアドキュメントを使わないと以下の通りHTMLのタグをすべてという形式で出力しなくてはいけません。
また、HTMLのタグを出力するにはCGIヘッダーをと書いてください。 以下のようにHTML全体をヒアドキュメントに入れてしまうとと書く必要が無いので楽に書けます。
カテゴリー: Perl
加算子,減算子について知ろう
この章では加算子,減算子について説明します。
加算子は数値を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を再起動してください。
Perlの読み方は「パール」ですが、このプログラム言語はCGIを実行するための言語です。
CGIとはの略語で、ブラウザからの要求があった時にWWWサーバ(webサーバ)でプログラムを実行する仕組みのことです。
ではPerlの特徴を見てみましょう。
[特徴1]
普通のHTMLファイルを読み込むとwebページを見ることが出来ますが、それはサーバから送られた何も変化しないデータを見ているだけです(非対話的。来訪者のカウントすらできません)。
しかし、CGIを活用することにより、ブラウザからの要求でWWWサーバの中でCGIスクリプトを実行させて、その処理結果をブラウザに返すので、掲示板やアクセスカウンターなどの対話的なページを作成することが出来ます。
[特徴2]
C言語はコンパイルを行って実行ファイルを作成してからプログラムを実行しますが、Perlはその都度プログラムを翻訳しながら実行します。
コンパイルとはプログラムをコンピューターが理解できるように翻訳する作業のことを言います。
[特徴3] ブラウザからwwwサーバに渡されたプログラムがCGIプログラムであればPerlソフトがそのプログラムを処理します。
そして処理した結果をwwwサーバに返して、そこからブラウザに処理した結果が渡され画面に表示するという流れになります。