前節で画面に文字を表示する方法はわかりました。 この節ではユーザーから情報を受け取って、それを表示することを考えます。 そこで必要になるのが変数です。
次のようなスクリプトを書いて、MS-DOSプロンプトから実行してみましょう(各行頭にある数字は行番号を示したもので、実際のスクリプトとは関係ありません。 スクリプトを書くときはこれらの数字を省いてください)。
01: print "あなたのお名前なんてーの?";
02: $username = <STDIN>;
03: print "よっ、$usernameちゃん、どう?最近。\n";
実行結果は下のようになります。
あなたのお名前なんてーの? can
よっ、can
ちゃん、どう?最近。
では、詳しく見ていきましょう。
1行目はprint関数です。 「あなたのお名前なんてーの?」と表示させます。
2行目がこのスクリプトのハイライト、新しいことが2つ出てきました。 まず最初に、<STDIN>というもの。 これは標準入力(普通はキーボード)からの入力を、Enterキーが押されるまで取りこむための物で、ファイルハンドルといいます。 STDINはSTanDard INputの略です。
次に、2行目の左辺を見てください。 $usernameというのがありますね。 これがこの節のメインイベント、スカラー変数です。 ここで「変数」というのは、文字列や数値などを入れる「箱」のことです。 この「箱」に対して、文字列や数値など、変数に格納される「中身」を「値」といいます。 Perlには大きく分けて、スカラー変数、配列変数、ハッシュ変数と、3つの変数があります。 スカラー変数はその中で最も基本的な変数で、主に文字列や数値を格納できます。 スカラー変数は、先頭に$(ドルマーク)をつけて表します。 その後に続くのが変数名です。 変数名にはアルファベット、数字、アンダースコア(_)を使うことが出来ますが、その最初の文字はアルファベットにしておく必要があります。 また変数名の長さには特に制約はないので、$aや$xとするよりは$usernameや$timeのように、そこに格納されている内容が簡単に推測できるようにしておく方がイイでしょう。 さらに、Perlでは大文字と小文字を区別するので、$Usernameと$usernameは別々のものになります。 最初のうちはタイプミスに注意が必要です。
最後に、$usernameと<STDIN>の間にある=。 これは「代入演算子」というもので、右辺で得られた演算結果等を左辺に代入するものです。 数学で使う=とはちょっと意味が違いますので、注意しましょう。
さて、ここまでをまとめると、スクリプトの2行目は「キーボードから入力された文字列や数値を$usernameというスカラー変数に代入しなさい」ということになります。
では、3行目を見てみましょう。 前節で学んだprint関数ですが、表示する文字列の中に$usernameというスカラー変数が入っています。 print関数は、ダブルクォートで囲まれた文字列の中にスカラー変数が入っていると、その部分を変数の値に置き換えて表示してくれます。 これを「変数展開」といいます。 それに対し、シングルクォートで囲まれた文字列はそのまま文字として表示されます。 試しに、上のスクリプトの3行目のダブルクォートをシングルクォートに変えて実行してみてください。 「よっ、$usernameちゃん、どう?最近\n」と表示されるはずです。
さて、これでスクリプトの仕組みがわかりました。 でもなんかすっきりしません。 もう一度実行結果を見てください。 「can」の後で改行が入ってしまっています。 これは、名前を入力する際に、最後に押したEnterキーのせいです。 とってもカッチョワルイので、何とか直しましょう。 それにはchomp関数を使います。 chomp関数は、指定した変数の値の最後の改行文字を取り除いてくれます。
01: print "あなたのお名前なんてーの?";
02: $username = <STDIN>;
03: chomp($username);
04; print "よっ、$usernameちゃん、どう?最近。\n";
とすると、
あなたのお名前なんてーの? can
よっ、canちゃん、どう?最近。
と、きれいに表示されました。 これでこのスクリプトは完成です。