作者: davi
日時: 2006/3/23(06:13)
Bruce.さん みなさん <  こん??は でび です

On Thu, 23 Mar 2006 01:25:35 +0900
"Bruce." <kbk@...> wrote:

> 多分、CGIでは有名なサイトのサンプルスクリプト

を、そのまま貼り付けて使ってあります。

よくよく探してみると、ミケネコさんも時間が2倍
かかることを指摘していらっしゃいますね。

さて、この件に関連して正規表現の初歩的な質問です。
いつもしっくり来ないのでおせーてください。

> $dest1 = $dest2 = $src;

動作の順番は右端から左へ進んでゆくのでしょうか。
つまり、日本語プログラム言語MINDじゃないけども、

$src を $dest2 に 代入する。
そして
$dest2 を $dest1に代入する。

こうなのでしょうか。それとも

$dest1 は $dest2 である。
そして
$dest2 は $srcである。
そこで、
$srcの中身を$dest2に入れる。
次いで
$dest2の中身を$dest1に入れる。

なのでしょうか。

初歩講座とかでは「イコールじゃないよ、代入だよ」
ってことを強調して書いてあるのが多いですが、
ここで知りたいのは解釈されてゆく「順番」です。

というのも、

> $dest1 =~ s/%([a-fA-F0-9]{2})/pack('C', hex($1))/eg;

のような表記は、

$dest1の中身「を」s///の左側に放り込んで(代入して)、
正規表現に一致した分をs///の右側に置き換え、
そうしてから
$dest1に戻す(代入する)

というように思えるのですね。

=の「右から左へ」なのか、「左から右へ」なのかで
混乱します。

『正規表現ハンドブック』p.35では

「左辺の値をマッチングし、置換結果を代入」

と、さらっと書いてありますが、身体感覚として「いつの
段階で=の左辺の中身が=の右辺に入ったの?」と、しっくり
来ないです。

私の場合、「変数の中身がいつの段階でどのようになって
いるか、予想・推測できない」というのが、どのスクリプト
言語に手を付けても、学習の阻害原因になっているように
感じられます。

if else が複数段になっていたり、関数の内側/外側が絡むと、
更にそれが痛い。

−−−−−−
# 遠隔ですが、文学系では定価*印刷数*0.1が印税の標準みたい。
# 共著はそれを人数頭割りや、汗をかいた割合で分配するのでは?
# 雑誌の単発物や連載コラムの方が割が良さそうですね。

でび  http://homepage1.nifty.com/davi/