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 「 スカラ変数 」(0x06)

Perl  「 スカラ変数 」(0x06)

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

Perl で利用する単一のデータ スカラ (scalar) 変数 について。




データの型



プログラミング言語には様々なデータの型があります。

例えば C 言語では、通常文字を扱う場合には char を、数値を扱う場合には int といった型を与えます (詳細は C 言語の関連書籍を参照)。

C 言語の様にデータ型を指定する必要のある言語では、変数を宣言する時に明示的に型を指定します。変数を処理する場合にも、その型を意識して、型にあった処理をします。

チマチマしていて面倒に感じるかもしれませんが、それはそれで、僕は面白いと感じました。

Perl は違います。

ものの本によると Perl はデータを "単数と複数で区別する" とあります。

つまり、データが文字 (や文字列) であっても数値であっても、その種類に関わらず、それをいくつ持っているか (ひとつなのか複数なのか) で区別します。

Perl では、ひとつだけの単独のデータをスカラデータと呼び、それを格納する変数をスカラ変数と呼びます。

Perl では、データの種類による区別を指定する必要がありません。


"文字列" は "複数の文字" じゃないのか、と初めはとまどいましたが、文字列を "文字がまとまったひとつのデータ" と認識すれば、なんとなく納得できる気がします。

大抵は文字列 1 行を 1 単位と区切り、そこからさらに細かく (, や空白で) 分割処理をする様に思います。

Perl には型がないと言われていますが、型を宣言しなくて良いというのがポイントの様です。

内部的に Perl 側で型を判断してくれるということでしょう。何で判断するの ? コンテキストで !。という理解で良いでしょうか。


スカラデータ



「a」 も「Hello」も「1」も「9999」もすべてひとつのデータとして、データ長も可変で対応してくれます。

Perl ではひとつのデータを扱う場合にスカラ (Scalar) 変数という変数を使います。

Perl のスカラ変数は頭に $ (ドル) のシジル (Sgil) が付きます。スカラ変数は Perl が扱うもっとも単純なデータです。


$char = "Hello Perl,";
$int = 1234;
$string = "Perl はスカラ変数で単一のデータを扱います";


文字も数値も関係ありません。

文字を指定する場合は大抵 " (Double quote) で囲みます。これをダブルクォート文字列リテラルと言います。

数値を " で囲むと文字列として格納出来ますが、文脈 (コンテキスト) で数値であることを期待された場合は数値として計算しちゃいます。


$chr = "3"; # " で囲んで文字として格納する

$chr = $chr * 3; # 演算子 * で 3 を乗算してみる

print "\$chr x 3 = ". $chr ."\n"; # 結果を print で表示する


これをファイル名 char で保存して、コマンド perl で実行すると、 9 という値が得られます。今回のプロンプトを示す記号は # です。

# perl char
$chr x 3 = 9
#


さらに、こんないたずらをしても Perl は値を 9 として返します。


$chr = "3char?"; # 3char? という明らかな文字列を格納する

$chr = $chr * 3; # 3char? という文字列に 3 を乗算しても 9 を得られる


これは、Perl が先頭の数値以降の文字列を無視することで成り立っています。

文脈 (コンテキスト) 上で、数値としての処理を期待されていると判断した Perl は、不要なデータをこともなげなに破棄します。

以下の様に先頭が文字だった場合は、それを 0 (ゼロ) として扱います。結果として $chr * 3 は 0 x 3 となるため、Perl は解として 0 を返します。


$chr = "char3?"; # 先頭が文字

$chr = $chr * 3; # 文字は 0 として扱うので、結果は 0 が返る


後で出てくる プラグマ warnings を指定すると以下の様な警告を出してくれます (けど演算は行われ、その結果を表示します) が、素の Perl だと何も言わずに計算結果を返します。

Argument "3char?" isn't numeric in multiplication
(引数 "3har?" は乗算の数値じゃありません)


C 言語では数値と文字、それと文字列は別の頭で考えますが、Perl ではそういった部分があっさり省略されています。

柔軟であることが Perl のひとつの魅力ですが、長所と短所は表裏です。使う場面、使う人によって印象は変わると思います。

いずれにせよ、これが Perl の仕様ということです。

また、Perl では、整数と浮動小数点数 (少数等) の数値を使えます。

Perl は内部的な計算を倍精度浮動小数点数で行うそうです。これは Perl をコンパイルした C コンパイラの double 型に左右されるとのことです。

精密な計算結果が必要になった場合は、専門の書籍にあたった方が良いでしょう。


0x06-> 0x07 へ



Perl で言うところの "スカラ" は、数学や物理学でいうベクトル量に対比する概念であるスカラ量に、意味は近いものの直接的な関係はないといいます。

プログラミング言語は数学的な要素が多い様に思いますが、Perl は言語学者が作っているということもあって、数学的厳密さと引き換えの "とある部分" にその魅力があるのかもしれません。

www.perl.org の About Perl には Perl の魅力について冒頭で以下の様にありました。

Powerful, stable, mature, portable
(パワフル, 安定, 成熟, ポータブル (持ち運びできる)

Perl 5 is a highly capable, feature-rich programming language with over 25 years of development.

(Perl 5 は非常に有能です, 豊富な機能のプログラミング言語です 25 年以上開発されてきた.)

Perl 5 runs on over 100 platforms from portables to mainframes and is suitable for both rapid prototyping and large scale development projects.

(Perl 5 は動作しています ポータブルからメインフレームの 100 を超えるプラットフォームで それと 両方に適しています 迅速な試作品作りや 大規模な開発プロジェクトの.)


ということです。

続けて Perl 6 について以下の様にありました。

"Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language which has its own development team.

("Perl" は 言語のファミリーです, "Perl 6" はファミリーの一員です, でもそれは 独自の言語です それは 独立した開発チームを持っています.)

Its existence has no significant impact on the continuing development of "Perl 5".

(その存在に 重要な影響はありません "Perl 5" の継続的な開発に.)


Perl 5 を利用するにあたって Perl 6 はあまり意識する必要はないとのことです。

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

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

次回 (0x07) へ続く

過去記事 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 ▲