Study of CGI

変数とスカラー

最初のCGIプログラムでは、プログラムの中に書いた文字を直接ブラウザに表示していました。

しかし、常に決まった文字を表示する場合はいいのですが、表示内容がプログラムの結果によって変化する場合はどうするのでしょうか?

あるいは、長めのプログラムになった場合で同じ文字が繰り返し表示される場合。

もちろん、そのときは毎回書いておくこともできるのですが、"Hello"を"Good morning"に変更しようというときはどうでしょう?

プログラムの結果を収めておくもの、あるいは繰り返し使う値(文字や数値など)を入れておく「もの」を変数と言います。

Perlで扱えるデータ型

Perlで扱えるデータ型には次の3種類あります。

「スカラー」

スカラーとは、単に数値や文字列などを一つだけ入れておくものです。

スカラー型の変数がスカラー変数です。 最も一般的に使われているデータ型です。

変数名は「$」で始まります。

「配列」

配列とは、スカラー変数の集合体です。

同じ型を持つ複数の値を配列の要素として一つにまとめて扱います。

まとめられた変数にはインデックスキーという0から始まるナンバーが順に振られ、個々の要素にはインデックスキーを使ってアクセスします。

配列型の変数が配列変数です。 収納されている値は順序付けられて収納されていますので、順次処理に適しています。

変数名は「@」で始まります。

「連想配列(ハッシュ)」

ハッシュとは、キーと値の対を持つ表を意味しています。

配列に似たデータ型ですが、インデックスキーの代わりに任意の文字(キー)を用いて個々の要素にアクセスします。

連想配列型の変数が連想配列変数です。

配列とは違い値は、順序だてて収納されていませんが、キーにより目的の値を直接的に取り出すのに適しています。

変数名は「%」で始まります。

変数名のルール

変数の名前の付け方には、次のルールがあります。

  • $、@、%の次の文字(識別子)は、英文字または「_ 」(アンダースコア)ではじまる。 ・識別子は英文字、数字、「_ 」(アンダースコア)で構成される。
  • 文字数の指定、制限はない。 ・予約語(Perlで予め決められた名前)は使用できない。(「$」と数値の組み合わせなど)
  • 大文字と小文字は区別される。(「$name」と「$Name」は区別される)

また、識別子が同じでも、データ型が異なる場合、それぞれは別のものとして識別されます。

変数(スカラー変数)

スカラー変数は文字や数字など一つだけのデータを扱う変数です。

識別子の前には 「$」 をつけます。 識別子は、予約語になっている以外の任意の名前を付けることができます。

識別子は、格納されているデータの内容を意味するものをつけると編集の際に便利です。

スカラー変数にデータを格納(代入)する場合には、「=(代入演算子)」 を用います。

代入演算子の左辺にはデータを格納するスカラー変数を置き、右辺には格納されるデータや格納するデータを収めた変数を置きます。

データが文字データの場合には、「’(シングルクォーテーション)」 や「"(ダブルクォーテーション)」 でデータを囲んで指定します。

[使用例]

$value = 'スカラー'; 文字を格納する場合
$value = 100; 数値を格納する場合
$value = $data; スカラー変数$data の値を $value に代入されます。
$value = @data; 配列@data の要素数が $value に代入されます。
$value = $hash{'data'}; 連想配列$hashのキー値dataの値が$valueに代入されます。

格納できるデータ

数値

Perlでは数値として整数と浮動小数点数を扱うことができます。

しかし、内部的にはPerl内部では倍精度浮動小数点数だけを扱います。

つまり、整数として表記されている数値も、Perl内部では浮動小数点数として扱われ、計算されています。

浮動小数点数

リテラル(literal)とはperlプログラムのソースコードの中で、データを表記する方法のことです。

PerlではC言語で使える浮動小数点数リテラルを全て扱うことができます。

小数点はあってもなくてもかまいません。

数値の後ろには10の何乗かを示すE記法(指数記法)を付けることができます。

例としては次のようになります。

1.25 1と1/4
7.25e45 7.25かける10の45乗(大きな数)
-6.5e24 マイナス6.5かける10の24乗(絶対値が大きな負の数)
-12e-24 マイナス12かける10のマイナス24乗(絶対値が非常に小さい負の数)
-1.2E-23 上と同じ数の別の書き方

整数

整数リテラルは、次のように示されます。

12
15
-2004
348

Perlでは8進数、16進数もサポートしています。

先頭に0をつけると8進数として、0xを付けると16進数として扱われます。

8進数では8で桁が一つ繰り上がり、10進数の8が8進数の10です。

16進数では10進数の10をAとして、順に15がFとなります。10進数の16で桁が一つ繰り上がり、10進数の16が16進数の10となります。

例としては次のようになります。

0377 8進数の377、10進数では255
-0xff マイナスの16進数ff、10進数では−255

文字列

文字を並べたものを文字列 (string) といいます。

文字列のそれぞれの文字は8ビットの値で、256文字からなる文字セットのうちの1文字をあらわします。

Perlは文字列という形態を利用して、バイナリデータも扱うこともできます。

文字列も数値と同じようにリテラル表現があります。シングルクォート文字列(single-quoted string)とダブルクォート文字列(double-quoted string)です。

シングルクオート文字列

シングルクォート文字列はシングルクォートによって文字の並びを囲んだものです。

シングルクォート自体は文字列には含まれません。シングルクォートは文字列の始めと終わりをPerlに教える役割を果たします。

シングルクォートの間に置かれている文字(改行文字も含む)がそのまま文字列の内容になります。

ただし、シングルクォート内でシングルクォート自身と逆スラッシュを扱う場合は例外で、その場合は逆スラッシュをシングルクォートや逆スラッシュの前に置きます。

'hello' 5つの文字「h、e、l、l、o」
'don't' 5つの文字「d、o、n、シングルクォート、t」
'' 空文字列(文字を一つも含まない)
'silly\\me' silly、その後に逆スラッシュ、その後ろにme
'hello\n' hello、その後に逆スラッシュ、その後ろにn
'hello
there'
「hello、改行文字、there」(全部で11文字)

シングルクォート内で逆スラッシュが特別な意味を持つのは、その直後に逆スラッシュかシングルクォートがある場合に限ります。

ダブルクオート文字列

ダブルクォート文字列は文字を並べた物を扱う点はシングルクォートと替わりません。

しかし、ダブルクォート文字列では、逆スラッシュはコントロール文字を指定したり、8進数や16進数によって任意の文字を指定したりできます。

"hello world\n" hello world、その後ろに改行文字
"new \177" new、スペース、その後ろに削除文字(8進で177)
"coke¥tsprite" coke、タブ、sprite

逆スラッシュの直後には、さまざま文字を置いて特殊な文字を示したり、機能を利用することができます。これを逆スラッシュエスケープと呼びます。

ダブルクォート文字列で使用できる逆スラッシュエスケープ

\n 改行(newline)
\r 復帰(return)
\t タブ(tab)
\f 改ページ(formfeed)
\b バックスペース(backspace)
\a ベル(bell)
\e エスケープ(escape)
\7 8進数でASCコードを指定(この例は、007=ベル)
\x7f 16進数でASCコードを指定(この例は、7f=削除文字)
\cC コントロール文字(この例は、コントロールC)
\\ 逆スラッシュ
\" ダブルクォート
\l 次の1文字を小文字にする
\L これ以降、¥Eまでを小文字にする
\u 次の1文字を大文字にする
\U これ以降、¥Eまでを大文字にする
\Q これ以降、¥Eまでの全ての非英数字の直前に逆スラッシュを挿入する
\E ¥L、¥U、¥Qの効果を終了させる

ダブルクォート文字のもう一つの特徴は、変数展開(variable interpolation)が行われる点です。

変数展開とは、文字を扱うときに、文字列中に現れたスラー変数と配列変数を、その時点の変数の値に書き換えるという機能です。

ポイント

  1. 数字の先頭に0をつけると8進数として、0xを付けると16進数として扱われる。
  2. 逆スラッシュの直後には、さまざま文字を置いてエスケープを使用できる。
  3. ダブルクォート文字では変数展開がされる。
Hello World! Study of CGI Arry Data

□新着

  • 2016/04/14
    ページ復旧
  • 2007/10/06
    Story Maker始動
  • 2007/06/13
    久々の更新
  • 2007/01/06
    logちょっとバージョンアップ
  • 2006/07/27
    ホームページのPerl 終了

□Topics

  • 2016/04/14
    サイト復旧
  • 2007/10/06
    StoryMaker始動
  • 2007/06/13
    今後にぜひご期待を!
  • 2006/06/26
    今後について
  • 2006/06/15
    環境の変化