blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 リテラル 」(数値・文字列) (0x08)

Perl 「 リテラル 」(数値・文字列) (0x08)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x08 回。

文字列と数値のリテラルについて。




リテラル (literal) : 数値



数値のリテラルには、整数リテラルと浮動小数点数リテラルがあります。

浮動小数点数とは、コンピュータの数値表現方式で、少数の近似値を扱うための方法です。

コンピュータは内部的に 0 か 1 で処理をするので、0 と 1 の間、ON と OFF の間、という様な表現は得意ではなく、近似値で補う必要がある様です。

どちらかというと、少数は得意ではないということですが、基本的には、少数も含めてマイナス記号等、普段使う書き方で問題ありません。

ただし、ちょっとした決まりがあります。

例えば、とても大きな (小さな) 値を表す指数表記には e が使えます。


7.25e45 # 7.25 * 10 の 45 乗
-12E-23 # マイナス 12 * -10 の 24 乗 (e は大文字も可)


また、Perl は、数値演算子として「べき乗演算子 (exponentiation operator)」 も持っています。演算子は * (アスタリスク) を 2 つ並べます。


2 ** 2 # 2 の 2 乗 = 4
2 ** 3 # 2 の 3 乗 = 8
2 ** 4 # 2 の 4 乗 = 16
2 ** 5 # 2 の 5 乗 = 32
2 ** 6 # 2 の 6 乗 = 64


基本的な加減乗除の数値の演算子は以下の記号で行います。

  加法 + (プラス記号)
  減法 - (マイナス記号)
  乗法 * (アスタリスク)
  除法 / (スラッシュ)


Perl は余剰演算子 % を持っています。これは除法の余りを取ります。C 言語も同じ演算子を持っていました。


print 10 % 3; # 10 / 3 の余り 1 が表示されます。


整数リテラルでは、桁の多い数の書き方に特徴があります。

通常は , (Camma) で区切るところですが、Perl の中で , は別の用途に使われているので数値の区切りには使えません。整数リテラルの桁区切りには以下の様に _ (Under score) を利用します。


99999999 # 区切らなくても問題なし
99_999_999 # 区切る場合は _ (Under score) で区切る


10 進数以外の整数リテラルも書けます。

  頭に数字の 0 (ゼロ) を付けると 8 進数 (Octal number) になります。
  0 (ゼロ) に続けて x (エックス) を付けると 16 進数 (Hexadecimal number) になります。
  0 (ゼロ) に続けて b (ビー) を付けると 2 進数 (Binary number) になります。


以下は 10 進数で見るとすべて 255 になります。


0377 # Oct
0xff # Hex
0b11111111 # Binary


こうした 10 進数以外の桁区切りにも _ が使えます。


0744_755
0x50_65_72_7C
0b1111_1111


Perl に限らず、コンピュータに数値演算をさせる場合は、前述の浮動小数点数を使う関係上、大小様々な誤差が出たりするそうです。

単純な計算でおかしな値が返されると、初めのうちはびっくりするかもしれませんが、ほとんどの場合で対策方法はすでに準備されています。

20 年以上に渡り開発されてきた Perl であれば、なおさらかもしれないですね。


リテラル (literal) : 文字列



文字を並べたものを、文字列と言います。

Perl が扱う最も短い文字列は、文字を含まない空文字 (Empty string) です。文字を含まないのに文字列と呼ぶのはおかしな気がしますが、そういう仕様になっています。

Perl が扱う最も長い文字列は、利用可能なメモリを使い果たす文字列です。

現実には、メモリを使い果たすほど長い文字列を利用した場合、Perl はほとんど何も処理できないだろうと言われます。

Perl には「組み込まれた制限は存在しない」という原則があるそうです。処理が出来ないにも関わらず文字列長に制限を設けないのは、そうした Perl の原則に従うものだということです。

文字列リテラルには以下の 2 つがあります。

  + シングルクォート文字列リテラル (Single-quoted string literal)
  + ダブルクォート文字列リテラル (Double-quoted string literal)

これらはそれぞれ ' ' と " " で文字を囲みます。

' と " は文字列の始点と終点を Perl に知らせるための記号なので、クォーテッドするために使う記号は、文字列に含めることは出来ません。それは文字列の終点を意味するからです。


# いずれもエラーになります。

"Good" morning";

'Good' morning';


文字列の中でクォーテッドの記号を使いたい場合は、\ (バックスラッシュ) でエスケープします。ダブルクォート文字列リテラルの中で \ を使いたい場合は、\\ としてエスケープします。

シングルクォート文字列リテラルの中で \ は問題なく使えますが、終点を示すシングルクォートの直前に \ を置くと、クォートが閉じられていないことになるので注意が必要です。



"Good\" morning"; # Good" morning と表示

'Good\' morning'; # Good' morning と表示

"Escape \\ Back slash"; # Escape\ Back slash と表示

'Escape \ Back slash'; # エスケープ不要

'Escape \'; # 終点がないとおこられる



0x08-> 0x09 へ



参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」

次回 (0x09) へ続く。

過去記事 RSS










同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲