Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Perl Prototype (Re: HACKING-ja -> mknmz.in)



臼田です。

藤原 誠 / Makoto Fujiwara wrote:
> > の時の (\%$$\$\$\$) はどう読むのかな... 全て pointer という意味 ?
> 臼> perlの知識に関する抜き打ち試験ですか?
> 
> 臼> \がついているのはpointer, ついていないのは値渡しだと思っています。
> 
> と思っていたのですが、ちょっと変だなと思うことがあって、
> 
> http://iis1.cps.unizar.es/Oreilly/perl/perlnut/ch04_07.htm
> を見ると、
> 
> A backslash placed before one of these symbols forces the argument to
> be that exact variable type.
> 
> 「\ が付いているのは特にそのままの形を要求している」で、
> 違っているようです。
私の答えは不正解でした。勉強になります。

ただいま「プログラミング Perl 第3版」で改めて勉強中です。
プロトタイプの\はそのあとにくる文字を強制するということですね。

「($)はスカラーコンテキストで評価された引数を1個受け取る」
 @foo を渡すと@fooの要素数が入る

「(\$)はドル記号で始まるもの以外をはじく」
 @fooはコンパイルエラーになる
 だけで
 $s、$a[3]だけでなく、
 $h{stuff}[-1]、${ \(2+5) }のようなものもOKと書いてありました。

そもそもよく考えればPerlのスカラー変数には型の概念がなかったです。
レファレンスだけを受け付けるようなプロトタイプを書くことはできないですね。
うけとってから検査をするようにしなければスカラー変数内の型はわからない
です。

でも改めて読むと、「プログラミング Perl 第3版」のP266とP267にある
2つのサンプルは勘違いをさせそうな例です。
値渡しの関数とそれをスカラーのリファレンス渡しに書き換えた関数をなら
ベていて違っているところはプロトタイプ宣言のところだけ。レファレンス
渡しならこう使えという例かと思ってしまいます。

藤原 誠 / Makoto Fujiwara wrote:
> 藤> Perl の prototype について、mknmz は合っていなくても Syntax OK 
> 藤> になっているのですが、これは何故でしょうか。
これは、既に解答をいただいてしまいましたが、
Perlのprototype自体がCやJavaプログラマがイメージするprototypeとかなり
違うと本に書かれていたので記述の厳密化にはそれほど役立たないのかもし
れません。

ソースのチェックが目的であれば別のアプローチが必要かもしれません。

臼田幸生