Bruce.です。
davi writes:
> > 多分、CGIでは有名なサイトのサンプルスクリプト
>
> を、そのまま貼り付けて使ってあります。
いかんなあ。
こういう風に使われることはわかってるんだから、直すべきところは
直さないと。
> さて、この件に関連して正規表現の初歩的な質問です。
> いつもしっくり来ないのでおせーてください。
>
> > $dest1 = $dest2 = $src;
>
> 動作の順番は右端から左へ進んでゆくのでしょうか。
> つまり、日本語プログラム言語MINDじゃないけども、
そうです。括弧をつけるなら
$dest1 = ($dest2 = $src);
になります。
> $src を $dest2 に 代入する。
> そして
> $dest2 を $dest1に代入する。
>
> こうなのでしょうか。それとも
$src の値を $dest2に代入し、その式の値(つまりは$srcの値であり
$dest2の値ですが)を$dest1 に代入。となります。
use strict;
my $src;
my $dest;
$src = "hello, ";
print $dest = $src . "world";
print "\n";
print $dest;
CやPerlではBASICなどとは違い、代入は「式」です。
つまり値を持ちます。であるから、while ()なんかの判定部分に
置けるわけですね。
> > $dest1 =~ s/%([a-fA-F0-9]{2})/pack('C', hex($1))/eg;
>
> のような表記は、
>
> $dest1の中身「を」s///の左側に放り込んで(代入して)、
> 正規表現に一致した分をs///の右側に置き換え、
> そうしてから
> $dest1に戻す(代入する)
= を使っていますが、この場合代入にこだわらない方が良いでしょう。
たとえば awk では gsub(/hoge/, "fuga", str) のように関数形式で
その第三引数で置換対象を指定します(省略されたときは$0)。
同様に、=~ は 右辺に置かれた式の対象を左辺に置かれたものにする。
というだけのことです。Perlの中の人は s/src/dest/ を実行するときに
置換を行う関数を実行していて、
> > $dest1 =~ s/%([a-fA-F0-9]{2})/pack('C', hex($1))/eg;
を、
gsub(/%([a-fA-F0-9]{2})/, "pack('C', hex($1)", $dest1)
のように解釈していると考えれば良いのでは。
#eオプションはとりあえず忘れてください。
> # 遠隔ですが、文学系では定価*印刷数*0.1が印税の標準みたい。
> # 共著はそれを人数頭割りや、汗をかいた割合で分配するのでは?
あの本は元々わたし一人で書くはずのものでした。
で、締め切りが近づいてもペースが上がらないので編集さんが
ヘルプをつけてくれたのです。あの話は、最初に執筆の話が来たときの
ものです。って具体的な提示額はいえませんけどね(笑)
いじょ。