Perl初歩の初歩

プログラミング言語Perlの初心者のためのわかりやすい解説ブログ(を目指しています)

目次

2099-12-31 23:59:59 | 目次・はじめに

現在、地道に追加中です。長い目で見てね。

-------------------- Perl初歩の初歩 目次 --------------------

はじめに
 簡単なプログラム
 Perlを自分のパソコンにインストールしてみよう
 プログラムはテキストエディタに書く
 プログラム実行までの流れ

ルールを覚えよう
 データを運ぶ入れ物が必要だ …変数の話
 数字や文字などを1つだけ入れる器…スカラー変数
 データを並べて入れておく箱…配列の話
 呼べば応える名前付き配列…連想配列の話
 です、ますをしっかりする…文法の話
 わかれ道を作ってこそ…条件の話
 リサイクルの心がけ…サブルーチンの話

命令を覚えよう
 print 人間へのメッセージ
 foreach コツコツとしらみつぶしに
 while 終わるまで何度でも
 if / elsif / else もしも空を飛べたなら
 open 歴史を残さなければ
 flock 入浴中の家族風呂

テクニックを身につけよう
 自分のための備忘録…コメントの話
 小数の四捨五入と丸め誤差の話
 


自分のための備忘録…コメントの話

2014-07-25 14:43:28 | テクニックを身につけよう

プログラム用語で「コメント」というと、それはプログラムの実行にはなにも関係ない、プログラム作成者のためのメモの意味になります。
コメントを書いておくと、後で自分でそのプログラムを見返した時に、あるいは、他の誰かがあなたに代わってプログラムの手直しをしようとした時に、とてもわかりやすくなります。

#これはコメントです

コメントは、#からはじまり、改行で終わります。何を書いても構いません。

$a = 1; # $aに1を代入します

このように、行の後ろにコメントを追加できます。$a = 1 は実行されますが、#以降のコメント部分はプログラムの実行時には無視されます。

# ──── 合計を求める ────
sub goukei {
    my ($a, $b) = @_;
    return $a + $b;
}

サブルーチンの最初にコメントを書いておくことで、何をするサブルーチンかがよくわかります。

# 1行目から2行目にわたって
# コメントを書くことができます

複数行のコメントも、それぞれの行頭に#を付けることで書くことができますが、裏技として、

=pod
この部分にコメントを書くことができます
$c = $a + $b;
print $c;
書いたプログラムを一時的に実行させない
ようにする時に便利です
=cut

上のように、=pod から =cut までを一気にコメントにすることもできます。
コメントなので、どのような式や命令を書いても実行されません。

 


プログラム実行までの流れ

2014-06-25 12:08:50 | 目次・はじめに

ここでは実際に自分で作ったプログラムを実行するまでの流れを説明します。

1. Perlの文法にのっとって、テキストエディタでプログラムを作ります。
2. コマンドプロンプトを開きます。
3. 「perl」+半角スペース+ファイル名 と入力してEnterキーを押します。
4. プログラムに問題がなければ、実行され(結果を表示して)終了します。

 →テキストエディタについてはこちら
 →Perlのインストール方法、コマンドプロンプトについてはこちら

 

メモ: これを読んでいる人の多くは、コマンドプロンプトじゃなくて、ブラウザで表示したいんだけど、と思っているかもしれません。Perlの実行結果をブラウザに表示させるには、Perlとは別にサーバーソフトのインストールと設定が必要になります。サーバーソフトとして代表的なのはApache(アパッチ)という無料のソフトで、筆者も自分のパソコンにインストールして使っています。ただ、ここはPerlの初心者向けのブログですので、Apacheのインストール方法は説明しません。必要な方は、Google等で検索してみてください。


open 歴史を残さなければ

2009-09-07 11:41:13 | 命令を覚えよう

プログラムを実行した結果を記録したい場合があります。また、すでに記録しているデータをプログラムに読み込ませて実行したい場合もあります。

たとえば、アクセスカウンターでは、まず前回までのアクセス数を読み込んで、それに1を足してものを新しいアクセス数として記録しているわけです。

データを読み込んだり、記録したりするのに、Perlでは open という命令を使います。

open(DAT, "counter.txt");
$count = <DAT>;
close(DAT);

print $count;

上記のプログラムは、counter.txt というファイルの1行目のデータを読み込んで表示しています。

open(ファイルハンドル, ファイル名) という形式で、読み込むファイルを指定します。
close(ファイルハンドル) という形式で、ファイルの指定を解除します。

ファイルハンドルとは、ファイルそのものを記号化したもので、ざっくり言ってしまえばファイル専用の変数のことです。特殊な変数なので、先頭に $ はつけません。

ファイルハンドルは自分で自由に命名して構いませんが、慣例として英字の大文字を使用しています。
FH とか FILE とか IN とか OUT などが多く使われているようです。ここでは DAT と名付けました。

<DAT> は ファイルからデータを読み込むときに使います。
上の場合、counter.txt の 1行目を読み込んで $count に入れています。

1行とは、「前回読み込み終わった直後」から、「次の改行記号の直後」までです。
つまり改行記号が(あれば)含まれます。
もし次の改行記号が見つからなければ、ファイルの最後まで読み込みます。

上の場合なら、open で 開いたすぐあとに <DAT> を使っているので、ファイルの先頭から1行を読み込んで、$count に入れているわけです。

次のような使い方もできます。

open(DAT, "data.txt");
$line1 = <DAT>;
$line2 = <DAT>;
close(DAT);

上の場合、$line1 には1行目が、$line2 には2行目が入ります。

したがって、ファイルを1行ずつ処理したい場合には、while を使って次のようにします。

open(DAT, "data.txt");
while ($line = <DAT>) {
  print $line;
}
close(DAT);

$line = <DAT> で 1行ずつ読み込んで表示します。
もし、読み込むべきデータが無くなったら while を抜けます。

ファイルの全部をいっぺんに読み込みたい場合には、

open(DAT, "data.txt");
@allbody = <DAT>;
close(DAT);

とします。
これは、ファイルの全部を1行ずつに分割して、配列に入れます。

もし、配列ではなくひとつの文字列としたいなら、上記の後に

$all = join('', @allbody);

とすればいいでしょう。


while 終わるまで何度でも

2009-06-10 15:32:50 | 命令を覚えよう

while (ホワイル) は、「~の間ずっと」という意味の英語です。

$x = 0;
$goukei = 0;
while ($goukei < 100) {
  $x++;
  $goukei += $x;
}
print $x;

上の例では、$goukei が 100未満の間ずっと { } の間を繰り返します。

まず、$x と $goukei を ともに 0 にしておきます。
次に、while の後ろの ( ) の部分の条件があてはまるかどうかを調べます。

$goukei は 0 で 100未満ですので条件があてはまるので、{ } の中に入ります。
$x++; は $x に 1 を足すという式。$x = $x + 1; を簡略化したもの。
$goukei += $x; は $goukei に $x を足した数を $goukei に入れるという式。$goukei = $goukei + $x; を簡略化したものです。

{ } の中を1回実行すると、$x は 1 になり、$goukei も 1 になります。

ここで、最初の条件のところに戻って、$goukei < 100 があてはまるかどうかを調べます。

$goukei は 1 で 100未満ですので条件があてはまるので、{ } の中に入ります。
$x++; で $x に 1 を足して 2 になります。
$goukei += $x; で $goukei に 2 を足して 3 になります。

ここで、最初の条件に戻って…

と繰り返すことになります。
この場合は、1 + 2 + 3 + … と足していって、100以上になるのは何を足した直後かがわかります。ちなみに答えは 14 です。

最後に $goukei が 105 となって、100未満ではなくなったときに、{ } の部分を無視して、先に進めるようになるわけです。


※ 注意してください!
while は うまくやらないと、いつまで経っても終わらないプログラムになってしまうという危険性があります。
条件がずっとあてはまっている場合、プログラムが終了しなくなり、いわゆる暴走している状態になるのです。

筆者も何度かやらかしてしまいました。

自分のWindowsパソコンでPerlが暴走してしまった場合には、あわてずに キーボードの [Ctrl] と [Shift] を押しながら [Esc] を押して「タスクマネージャー」を起動して、プロセスの中にある「perl.exe」を選択して、「プロセスの終了」ボタンをクリックすればOKです。

レンタルサーバーなどでは暴走させてはいけませんが、万が一の場合に備えて、多くのサーバーでは「30秒以上実行し続けているプログラムは強制的に終了させる」というような措置がとられているようです。