PHPやPerlで変数の記号に「$」が使われる理由
PHPやPerlで変数を定義するとき、当たり前のように先頭に「$(ドル/ダラー)」をつけていますが、ふと、
「変数の前に付ける記号はなぜ『$』なんだろう?」
と思い立ち、そんなことはものの本に書かれているのかもしれませんが、ネットで調べてみました。
ちなみにPerlで「$」を使うのはスカラ変数だけです。
1.「$」はBASIC言語から使われている
BASIC言語では変数の型で文字列を表すときに、次のように「$」を使っています。ただし変数の前ではなく後につけています。
10 READ A$
20 READ B$
30 C$=A$+B$
40 PRINT C$
また「『$』はBASICの名残で使っているようです」という記事をみつけました(ただしVBの話として)。
2.「$」は「ストリング」?
仮にPHPやPerlなどがBASICの名残で「$」を継承していると仮定しても、なぜBASICでは「$」を使っていたのでしょうか。
調べていると、Wikipediaの「Dollar sign」の解説の中に次のような記述がありました。
$ was used for defining string variables in older versions of the BASIC language ("$" was often pronounced "string" instead of "dollar" in this use).
推測の域を超えませんが、「$」という記号は縦棒がなければ「S」になるので、BASICの時代には「$」は文字列(String)を意味する記号として使われていたのかもしれません。
Perlの場合はスカラー(Scalar)の「S」として使っているのかもしれません(推測で書いてます)。
ということで明確な情報が得られていないので、情報お待ちしています。
2011.10.16追記
オライリー「初めてのPerl第5版」のP53に、「Larryの主張は、$calar,@rrayの意味で定義している」旨の記述がありました。
3.Perlの「@」や「%」の由来は?
話がそれますが、Perlの配列変数を示す「@」は「a」に似ているので「Array」を意味しているのかもしれません(これも推測です)。
また、ハッシュ変数を示す「%」は、簡単なハッシュ関数で割り算を利用した余りを使うので、その演算子を示す「%」からきているのでしょうか(もちろん推測です)。
こちらも情報お待ちしています。
4.参考サイト
ImageMagick と Image::Magick(PerlMagick) のバージョン対応
Windows版の ImageMagick は、インストール時に、Perl で ImageMagick を操作するための Perl モジュール Image::Magick(PerlMagick) を、オプション指定でインストールすることができます。
ただし、ImageMagick のバージョンによって、インストールできる Image::Magick のバージョンが異なります。下の図の赤枠は、インストールウィザードの途中で表示される Image::Magick のインストール指定と、そのバージョンです。
この場合、ImageMagick 6.3.7 のインストール時に、ActivePerl 5.8.8 build 822 に対応する Image::Magick をインストールすることを示しています。
以下、ImageMagick のバージョン別に、同時にインストールされる Image::Magick のバージョンが対応する ActivePerl バージョンを調べてみました。
| ImageMagick バージョン | 同時にインストールする Image::Magick が 対応する ActivePerl バージョン |
|---|---|
| ImageMagick-6.3.2-9 ~ ImageMagick-6.3.4-2 |
Perl 5.8.8 build 819 |
| ImageMagick-6.3.4-3 ~ ImageMagick-6.3.5-8 |
Perl 5.8.8 build 820 |
| ImageMagick-6.3.5-9 ~ ImageMagick-6.3.8-0 |
Perl 5.8.8 build 822 |
| ImageMagick-6.3.8-1 ~ ImageMagick-6.4.1-3 |
Perl 5.10.0 build 1002 |
| ImageMagick-6.4.1-4 ~ ImageMagick-6.4.3-6 |
Perl 5.10.0 build 1003 |
| ImageMagick-6.4.3-7 ~ ImageMagick-6.5.2-10 |
Perl 5.10.0 build 1004 |
| ImageMagick-6.5.3-0 ~ ImageMagick-6.5.5-4 |
Perl 5.10.0 build 1005 |
| ImageMagick-6.5.5-5 ~ ImageMagick-6.5.9-1 |
Perl 5.10.1 build 1006 |
| ImageMagick-6.5.9-2 ~ |
Perl 5.10.1 build 1007 |
上記の各バージョンの ImageMagick については、2009年4月2010年8月現在、下記のURLからダウンロードできることを確認しています。
なお、ActivePerl 5.8.9 を利用している場合は、多分、ActivePerl 5.8.8 build 822 対応のバージョンの ImageMagick(ImageMagick-6.4.1-3 等)で良いと思います。
上記に掲載した表の元データは、下記の各インストールウィザードでの表記にもとづいています。
- Perl 5.8.8 build 819
- ImageMagick-6.3.2-9-Q8-windows-dll.exe
- ImageMagick-6.3.3-10-Q8-windows-dll.exe
- ImageMagick-6.3.4-0-Q8-windows-dll.exe
- ImageMagick-6.3.4-1-Q8-windows-dll.exe
- ImageMagick-6.3.4-2-Q8-windows-dll.exe
- Perl 5.8.8 build 820
- ImageMagick-6.3.4-3-Q8-windows-dll.exe(表記は920だが多分820の誤り)
- ImageMagick-6.3.4-6-Q8-windows-dll.exe
- ImageMagick-6.3.4-10-Q8-windows-dll.exe
- ImageMagick-6.3.5-0-Q8-windows-dll.exe
- ImageMagick-6.3.5-3-Q8-windows-dll.exe
- ImageMagick-6.3.5-6-Q8-windows-dll.exe
- ImageMagick-6.3.5-8-Q8-windows-dll.exe
- Perl 5.8.8 build 822
- ImageMagick-6.3.5-9-Q8-windows-dll.exe
- ImageMagick-6.3.5-10-Q8-windows-dll.exe
- ImageMagick-6.3.6-10-Q8-windows-dll.exe
- ImageMagick-6.3.7-10-Q8-windows-dll.exe
- ImageMagick-6.3.8-0-Q8-windows-dll.exe
- Perl 5.10.0 build 1002
- ImageMagick-6.3.8-1-Q8-windows-dll.exe
- ImageMagick-6.3.8-2-Q8-windows-dll.exe
- ImageMagick-6.3.8-3-Q8-windows-dll.exe
- ImageMagick-6.3.8-5-Q8-windows-dll.exe
- ImageMagick-6.3.8-11-Q8-windows-dll.exe
- ImageMagick-6.3.9-10-Q8-windows-dll.exe
- ImageMagick-6.4.0-1-Q8-windows-dll.exe
- ImageMagick-6.4.0-11-Q8-windows-dll.exe
- ImageMagick-6.4.1-1-Q8-windows-dll.exe
- ImageMagick-6.4.1-2-Q8-windows-dll.exe
- ImageMagick-6.4.1-3-Q8-windows-dll.exe
- Perl 5.10.0 build 1003
- ImageMagick-6.4.1-4-Q8-windows-dll.exe
- ImageMagick-6.4.1-10-Q8-windows-dll.exe
- ImageMagick-6.4.2-10-Q8-windows-dll.exe
- ImageMagick-6.4.3-1-Q8-windows-dll.exe
- ImageMagick-6.4.3-3-Q8-windows-dll.exe
- ImageMagick-6.4.3-5-Q8-windows-dll.exe
- ImageMagick-6.4.3-6-Q8-windows-dll.exe
- Perl 5.10.0 build 1004
- ImageMagick-6.4.3-7-Q8-windows-dll.exe
- ImageMagick-6.4.3-10-Q8-windows-dll.exe
- ImageMagick-6.4.4-0-Q8-windows-dll.exe
- ImageMagick-6.4.5-0-Q8-windows-dll.exe
- ImageMagick-6.4.7-10-Q8-windows-dll.exe
- ImageMagick-6.4.8-10-Q8-windows-dll.exe
- ImageMagick-6.4.9-6-Q8-windows-dll.exe
- ImageMagick-6.5.0-10-Q8-windows-dll.exe
- ImageMagick-6.5.1-10-Q8-windows-dll.exe
- ImageMagick-6.5.2-10-Q8-windows-dll.exe
- Perl 5.10.0 build 1005
- ImageMagick-6.5.3-0-Q8-windows-dll.exe
- ImageMagick-6.5.3-10-Q16-windows-dll.exe
- ImageMagick-6.5.4-10-Q8-windows-dll.exe
- ImageMagick-6.5.5-0-Q8-windows-dll.exe
- ImageMagick-6.5.5-3-Q8-windows-dll.exe
- ImageMagick-6.5.5-4-Q8-windows-dll.exe
- Perl 5.10.1 build 1006
- ImageMagick-6.5.5-5-Q8-windows-dll.exe
- ImageMagick-6.5.5-10-Q8-windows-dll.exe
- ImageMagick-6.5.6-10-Q8-windows-dll.exe
- ImageMagick-6.5.7-10-Q8-windows-dll.exe
- ImageMagick-6.5.8-10-Q8-windows-dll.exe
- ImageMagick-6.5.9-0-Q8-windows-dll.exe
- ImageMagick-6.5.9-1-Q8-windows-dll.exe
- Perl 5.10.1 build 1007
- ImageMagick-6.5.9-2-Q8-windows-dll.exe
- ImageMagick-6.5.9-5-Q8-windows-dll.exe
- ImageMagick-6.5.9-10-Q8-windows-dll.exe
2010.08.13
確認バージョンを追加しました。
Active Perl でワイルドカードを利用する
UNIX やLinux ではコマンドラインから Perl を実行する時、入力するファイル名に「*(ワイルドカード)」を使用することができます。
例えばあるディレクトリに10のHTMLファイルがあり、それを全て順番に読み込みたい場合、「*.html」と指定するだけで、ファイル名をひとつずつ記述しなくても全てのHTMLファイルを対象とすることができます。
ところが ActivePerl でワイルドカード指定をしたところ、ワイルドカード「*」がそのままファイル名になるだけで全く読み込まれませんでした。googleで検索してみたところ、ActivePerl の仕様でMS-DOSのワイルドカードに対応していない、つまりファイル名として展開されないようです。
ですが利用できる方法も同時にみつかりましたので、ActivePerl でワイルドカードが利用する方法をご紹介します(備忘録)。
1.Wildcard.pm をダウンロード
下記のサイトより Wildcard.pm をダウンロードします。
2.Wildcard.pm の配置
ダウンロードしたファイルをPerlライブラリディレクトリに配置します。Perl のパスが /usr/bin/perl であれば、配置ディレクトリは、
- C:\usr\lib
になります(Cドライブにインストールされている場合)。
3.スクリプトに use 関数を追加
実行するPerlスクリプトの先頭に
use Wildcard;
を追加します。
以上です。これでワイルドカードを指定するとファイル名として展開されるようになります。
参考サイトは下記です。ありがとうございました。
ちなみにこのページの最後に書いてある文章には軽く斬られました(笑)。
?(略)?もっと上手な「Perl使い」の人たちは、ワイルドカード自体あまり使いません。Perl内に用意された別の方法を使ってもっと柔軟に複数ファイルを扱うことが多いので、この仕様はそれほど問題にはならないのです。?(略)?
PHP5のインストール
以前よりカテゴリー別アーカイブを分割表示にしたかったのですが、そのためには自宅サーバにPHPをインストールしなければなりません。そもそもPHP自体が何者か良く分かってなかった(笑)私にとってはやや高いハードルでした。が、リンクしてる方が使い始めているのを見ていると焦りが(笑)。
#予めサービスとして用意されているレンタルサーバはいいですね…。
ということで一念発起。調査に時間がかかりましたが無事インストールできました。以下にその方法を紹介しておきます。
その前に「PHPは何か?」ということですが、「Hypertext Preprocesser の略で、eコマースサイトやその他のWebアプリケーションのための動的Webページを作るための、オープンソースで提供されているサーバーサイドスクリプト言語です」ということらしいです。これではよく分からないので簡単なサンプルを紹介します。
HelloWorld.php というファイルを作り、下記のHTMLを記述します。
<html>
<body>
<?php echo "Hello World!!"; ?>
</body>
</html>
ファイルをどこに配置する等の細かい説明は省略して、IE等のブラウザにこの helloWorld.php で終わる URL(例:http://localhost/HelloWorld.php) を指定し、このファイルにアクセスします。PHPがインストールされていれば、表示されたHTMLソースは
<html>
<body>
Hello World!!
</body>
</html>
となります。
要するに青色で表示した <?php ? ?> の部分(PHPスクリプト)をPHPが解釈して実行してくれるわけです。上記はPHPスクリプトにする必要はありませんがPHPで扱われるタグの例として示しました。実用的なスクリプト例としては以下のようなものがあります。
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
echo 'あなたはInternet Explorerを使用しています<br/>';
}
?>
これは下記のような結果を表示します。
あなたはInternet Explorerを使用しています<br/>
では本題に入ります。今回、2004/07/13に公開された PHP5.0.0 をインストールしました(巷では 4.x.x が多いみたいですが)。なおOSは Windows2000、HTTPサーバは Apache2.0 で予めインストールされていることが前提で書いてます。
1.PHPのダウンロード
PHPは無償でダウンロードできます。PHPのサイトから上部の download をクリックし、 Windows Binaries と書かれた下の PHP 5.0.0 zip package をクリック。
2.PHPのインストール
ここではCドライブ直下に"php"というフォルダを配置する例で記述します。まずダウンロードしたアーカイブを解凍します。解凍して出来上がった上位のフォルダを"php"に変更してCドライブに移動するか、Cドライブ直下にphpフォルダを作って解凍したファイルをごっそりコピーします。phpフォルダ配下に php.exe やdllファイル等がずらっと並んでいる状態になればOKです。
3.ファイルのコピー
phpフォルダ配下にある、拡張子が".dll"のファイルを C:\WINNT(XPならWINDOWS/system32) 配下にコピーします。また php.ini_recommended を php.ini にリネームして C:\WINNT(XPならWINDOWS)にコピーします。多くのサイトでは php.ini_dist をリネームするように書かれていますが、日本語マニュアルのページのWindowsシステムへのインストールでは、
配布されるzipファイルには php.ini-dist と php.ini-recommended の二つのiniファイルが 含まれています。パフォーマンスとセキュリティの観点から 最適化されたデフォルト設定がなされている php.ini-recommended のほうを使うことが推奨されます。
と書かれていますのでこちらを使用することにしました。
4.php.ini のカスタマイズ
先の日本語マニュアルでは「PHPはこのiniファイルのデフォルト設定できちんと動作します。」と書かれてまして、とりあえず私は何も設定していません。日本語化対応で下記の部分は修正が必要かも知れません。
拡張モジュールの設定
extension_dir = C:/php/ext/
マルチバイト対応のためのコメント記号(;)削除
;extension=php_mbstring.dll
マルチバイト出力変換の有効化
output_handler = mb_output_handler
マルチバイト対応のためのコメント記号(;)を適宜削除
;mbstring.xxx = xxx
5.Apacheの設定変更
ApacheにPHPを関連付ける設定です。httpd.conf に下記を追加します。
なおApche上でPHPを動作させるには ApacheモジュールDLLを使用する方法とCGIバイナリを使用する方法があるようです。両者の違いが分からなかったのですが私はDLLを使用する方を選んでみました(もしかしたら機能や性能面で違いがあるのかも知れません)。詳細は日本語マニュアルのApache2.0サーバに載ってます。
ApacheモジュールDLLを使用する場合
173行目辺り:ApcheでのPHP有効化
LoadModule php5_module C:/php/php5apache.dll
CGIバイナリを使用する場合
530行目辺り:エイリアスの設定("/php/"を"C:/php/"と解釈)
ScriptAlias /php/ "C:/php/"
840行目辺り:PHP実行ファイルの実体を指定
Action application/x-httpd-php /php/php.exe
いずれの場合も必須の設定
325行目辺り:ファイル名を省略した時に index.php を検索
DirectoryIndex index.html index.html.var index.php
830行目辺り:PHPが動作するファイル拡張子の指定
AddType application/x-httpd-php .php
6.Apacheの再起動
7.テスト
以下のPHPスクリプトを作成、index.php 等のファイル名で保存しURLアクセス。
<? phpinfo(); ?>
以上です。なおインストールに際して参考にさせて頂いたサイトは下記の通りです(なぜかblogサイトなし)。どうもありがとうございました。
J2SE 5.0 発表
J2SE(Java 2 Standard Edition)がバージョンアップするという記事がYahooのニュースに載ってました。現在のバージョンは 1.4 なので本来なら 1.5 なのですが、これまでのマイナーバージョンだった小数点以下をメジャーバージョンとして振り直すようです。

