(1) (2) (3) (4) (5) (6) (7)

Perl 入門 (2)

今回も Perl に関する基礎的な事項について学んでいきます。 先週は用事があって急いだのでせわしなくて申し訳ありませんでした。 今回はのんびりやりましょう。

前回、「関数」というものを習いました。数学の関数と比較して、 似ているところ・異なるところがあるのを覚えていますか? 今回は「データ」「変数」について学びます。

データ

前回はprintという関数を学びましたが、 この関数は複数の引数をとることができました。 引数には次のようなものがありました。

Perlでは数値データと文字列データを必要に応じて自動的に変換する機能が 備わっています。 例えば次のような内容のスクリプトnm004.plを実行すると、 画面にはなにが表示されるでしょう。 (注:先頭の「1: 」は行番号を示すためにつけてあります。 これはスクリプトの一部ではありませんから、入力しないで下さい。)


 1: print("123" + 45);

実際に実行すると168という数字が表示されます。 つまり"123"は文字列なのですが、+ という演算子が 後に続くので、Perlが「あぁ、これは数値として取り扱って欲しいんだな」 と解釈して123という数値とみなされ、それが45に足されて 168になるわけです。

以上の「数値」「文字列」のデータを「スカラー」と呼びます。 スカラーを並べてコンマで区切って並べたものを「リスト」 または「ベクター」といいます。 例えば、(1,2,-3)("山崎", "正之", 50)はリストです。 ちょうど線形代数で出てくる 「スカラー」と「ベクトル」の関係になります。 リストは丸括弧で囲みますが、省略することもできます。


変数の利用

変数」とは、データを格納するものです。 変数には

があります。変数名は上の3種類を区別するため、 接頭文字 $, @, % ではじめ、 そのあとに英数字や記号(_も含む)を並べます。 ただし接頭文字のあとにすぐ数字や_など特殊なものを続けたものは すでにシステムが予約している特別な変数と重なることがあるため、 自分用の変数の名前には「英数字と_」のみを用い、かつ 接頭文字のあとには「数字や_」は使わないことにします。

特殊変数の例:$1 $2 ... $9 $_ $. $, $? $[ $] ..... 

変数に値を代入するには、代入演算子=」を使います。 左辺に右辺の値を代入する働きをもっています。 数学での等号とは意味が違うので注意して下さい。

よく使う演算子には次のようなものがあります:

演算子説明使用例
=代入$a = 10
+
-
*
/
加算
減算
乗算
除算
$a + $b
%除算の余り$a % $b
**べき乗$a ** 3
.文字列の連結$filename . ".bak"
x文字列や配列の繰り返し"abc" x 4
("abc") x 4
++
--
インクリメント
デクリメント
++$a
$a++
&&
||
論理積
論理和
($a > 0) && ($b > 0)
==
!=
数値として等しい
等しくない
$a == 0
<
>
より小さい(数値として)
より大きい(数値として)
$a > 0
<=
>=
より小さいか等しい(数値として)
より大きいか等しい(数値として)
$a >= 0
eq
ne
文字列として等しい
等しくない
$str eq "abc"
lt
gt
より小さい(文字列として)
より大きい(文字列として)
$str lt "abc"
le
ge
より小さいか等しい(文字列として)
より大きいか等しい(文字列として)
$str ge "abc"
=~パターンマッチ, 変換, 置換$str =~ m/abc/

以下のようなスクリプトをメモ帳で作成し、nm005.pl という名前で 保存します。


 1: $a = 123;
 2: $b = 45;
 3: $c = "123";
 4: $d = "ab";
 5: print($a + $b, "\n");
 6: print($a - $b, "\n");
 7: print($c . $d, "\n");
 8: print($d x 4, "\n");
 9: print(($d) x 4, "\n");
10: print($a == 0, "\n");
11: print($a != 0, "\n");

どうなりましたか? 出力が納得できますか?  式を変えたり、上の表の他の演算子を使って上のスクリプトにさらに行を追加したりして 実行してみましょう。 そのスクリプトとその実行結果を自分のページに載せて下さい。 (締切は日曜日)



(注)

[リストの要素]
リストから要素を取り出すには後ろに[n]を付けます。 n は0 以上の整数で、先頭からの位置を示します。 一番先頭が0で、次が1、その次が2、…と続きます。 例えば、リスト
("日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜")

の場合
  • ("日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜")[0] の値は"日曜"
  • ("日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜")[1] の値は"月曜"
  • ("日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜")[2] の値は"火曜"
  •   ……
となります。
@youbi = ("日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜");

などとして配列@youbi を定義した場合は、これらを$youbi[0], $youbi[1], $youbi[2], ……というふうに表すことができます。 (先頭の記号が@ではなく$になることに注意してください!!) 逆に
$youbi[0] = "日曜"; $youbi[1] = "月曜"; $youbi[2] = "火曜";  ……

という風に配列の要素を定義することもできます。

[リストの略記法]
1ずつ増加する整数列のリスト、例えば (2, 3, 4, 5, 6, 7, 8, 9) は (2 .. 9) のように略して書くことができます。