§2.1 スカラー


作成日:2001/06/19(火)

スカラーはPerlのデータ型の中で最も基本的なもので,数値や文字列,リファレンスといった単純なデータをさしています。 C言語などでは数値と文字列を分けて扱いますが,Perlはまとめてスカラーとして扱います。 そしてそれぞれを操作するための演算子もたくさん用意されています。 またスカラー変数には,これらのスカラーを格納することができます。
 リファレンスについては後ほど説明するとしてこの節では,数値と文字列の表し方(リテラル)について見ていこうと思います。

数値

数値には整数(1, 255,-40等)と浮動小数点数(一般的には小数と言われる4.5, 3.14等)があります。 まず整数を表すには次の方法があります。

 15
 -402
 5_929_401

最後は5929401を見やすくしたものです。 通常のようにカンマを使って5,929,401とすると5と929と401のリスト(順序付けされたスカラーの集まり。 詳しくは次の章を参照してください。)と解釈されてしまいます。 また別のファイルからデータとして読みこむ場合などにはこの書き方は出来ません。

また小数リテラルには次のものがあります。

 3.14
 -2.71828
 0.1557e4  #0.1557*10の4乗
 0.1557E4  #上の数の別表記
 0.1557-e4  #0.1557*10のー4乗

0.1557e4、0.1557E4はどちらも0.1557×104の意味、0.1557-e4は0.1557×10-4を表しています。
 さらにPerlは数値の先頭に0がついていると8進数として,0xがついていると16進数として認識します。

 044 #8進数の44,10進数の36
 0x44 #16進数の44,10進数の68

Perl5.6から2進定数もサポートされるようになりました。

 0b110;  #2進数の110、10進数の6

文字列

「文字列」とは読んで字のとおり、「Hello World!!」のような「文字の列」のことです。 文字はASCIIコードを基本としています。
 文字列リテラルには2通りあります。

(1)シングルクォート文字列

'Hello Perl'や'Do your best!!'のように,シングルクォート( ' )で囲んだ文字列のことです。 シングルクォート自身は文字列には含まれません。  シングルクォート文字列はその文字をそのまま表示します。よって、

 print 'Hello Perl\n';

の出力結果は、

 Hello Perl\n

となります。
 では,シングルクォート文字列の中にシングルクォートを書きたい場合はどうすればイイでしょうか? その場合は文字列中のシングルクォートの前に\をつけます。

 print 'I don\'t like snake.';

 I don't like snake.

 print q/I don't like snake./;

としても同じ結果が得られます。

(2)ダブルクォート文字列

ダブルクォート文字列は"Hello Perl!!"や"nyanko"のように、文字列をダブルクォートで囲んで表します。 シングルクォート文字列との大きな違いは,シングルクォート文字列では,文字列をそのまま出力したのに対し,ダブルクォート文字列では変数展開が行われたり,エスケープシーケンスを認識したりすることです。例えば,

 print "Hello, Perl!!\n";  #\nは改行を表すので
 print "This is new line.";

の実行結果は

 Hello, Perl #ココで改行します
 This is new line.

となります。 以下に主なエスケープシーケンスを示します。

エスケープ文字 意味
\a アラーム
\b バックスペース
\cJ コントロール文字(この場合はCtrl-J)
\e エスケープ(ESC)
\f 改ページ
\n 改行
\r 復帰
\t タブ
\033 8進数で表した文字
\x1a 16進数で表した文字
\l 次の1文字を小文字に
\u 次の1文字を大文字に
\L \Eまでを小文字に
\U \Eまでを大文字に
\E \L, \U, \Qの効果を終了
\Q \Eまでの非英数文字の前に\をつける

次にいくつか使用例を示します。

 print "\lNyanko\n";
 print "\unyanko\n";
 print "\LNYANKO\E\n";
 print "\Unyanko\E\n";
 print "\Q#$@!\E\n";

では、ダブルクォート文字列中で\1000と表示したい場合はどうするか? そうです。 \の前にもう1つ\をつけます。

 print "This CD is \\1000\n";

またダブルクォート文字列中に$や@があると、Perlはそのあとの文字を変数名と解釈します。 なので$100と書く場合やishiki@mrj.biglobe.ne.jpと書く場合にも、\をつけて保護します。

 print "This computer is \$1200\n";
 print "ishiki\@mrj.biglobe.ne.jp\n";

またシングルクォート文字列同様,ダブルクォート文字列にも次のような書き方があります。 次の例のようにダブルクォート文字列中でダブルクォートを使う場合に便利でしょう。

 print qq/He said "I love you"\n/;
         #いや〜ん、照れちゃう

では、文字列をクォートで囲まなかったらどうなるでしょうか? Perlはクォートされていない文字列、つまり裸のワード(bare word)については、他に解釈のしようがない場合にはクォートされた文字列として扱います。 ですから例えば、

 $can = can;

とすると、$canにはcanがセットされますが、

 print 14 + 26;

とすると、「40」と表示されてしまいます。 また、日本語などをクォートしないで用いた場合にはエラーになることもありますし、ファイルハンドル(後の章参照)と間違えて解釈してしまう恐れもあります。 ですから文字列はクォートで囲む習慣をつけておいたほうがいいでしょう。

(3)ヒアドキュメント

複数の行にわたる定型文を出力したい場合,いちいちprint文を使うのは大変です。 そこで次のような書き方をします。 これをヒア文字列(ヒアドキュメント)といいます。

 print <<"EOF";
 Hello, Perl!!
 My name is can.
 I like nyanko.
 EOF

スカラーのリテラル(表記法)についてはこんなところです。次の節ではスカラー値を格納するためのスカラー変数について見て行きます。


「§1.8 アウトソーシング」へ 「§2.2 スカラー変数」へ
ソフトバンク パブリッシング株式会社

Copyright (C) can All Rights Reserved
e-mail:ishiki@mrj.biglobe.ne.jp