[Namazu-users-ja 1207] Re: mknmzのプロトタイプ宣言

Shigekazu Aoyagi aoyagi @ kyf.biglobe.ne.jp
2011年 6月 23日 (木) 10:49:47 JST


青柳です。

On Wed, 22 Jun 2011 21:29:33 +0900
Tasamasa Teranishi <yw3t-trns @ asahi-net.or.jp> wrote:

> > ! sub generate_uri (@) {
> >       my ($file, $fragment) = @_;
> >       return "" unless defined $file;
> ...
> > ! sub generate_uri ($$) {
> >       my ($file, $fragment) = @_;
> >       return "" unless defined $file;
> 
> generate_uri ですが、これは引数1つで呼び出される時と、引数2つで
> 呼び出されることがあります。
> また generate_uri の中身で判断すると、引数なしで呼び出されること
> も想定しています。(引数なしで呼ぶことに意味があるかどうかは別に
> して)

改めて generate_uri() を確認しますと、確かにそのようにコーディングされて
いるようです。また mknmz:470行では $fragment 無しで呼び出していますので
私のパッチは不適切でした。申し訳ございません。

> このため、($$) だとまずいです。
> 引数の省略ができるため (;$$) とするか、(@) のままでないと
> いけません。
> 
> こういう場合、(@) を (;$$) に書き換えて、引数2個で省略が可能だ
> ということを明記した方がいいかどうかは Perl の場合ちょっと
> 不明です。
> # 割と (@) を使うことも多いので。

generate_uri() の場合は、($;$)でよいようにも思いますが、本質的では
ありませんので、取り込んでいただくことを無理にお願いするものでは
ありません。

> > ! sub trapintr {
> >       my ($signame) = @_;
> >       print STDERR "Warning: signal $signame occured.\n";
> >   }
> ...
> > ! sub trapintr($) {
> >       my ($signame) = @_;
> >       print STDERR "Warning: signal $signame occured.\n";
> >   }
> 
> 次に trapintr ですが、これはシグナルハンドラです。
> シグナルハンドラでは引数が1つと仕様で決まっているので、明記しても
> 良いのですが、perldoc perlipc で示されている例のように引数を
> 省いて記述した例が多数存在するため、慣例に従っています。
> 
> おそらくシグナルハンドラということで、この関数をユーザが明示的に
> 呼び出すことはないため、プロトタイプ宣言する意味がほぼなく、
> 誰も意識していないためではないかと思います。

こちらは了解いたしました。

> ということで、
> 
> - 現状問題が生じていない
> - 修正するメリットが特にない
> 
> という理由により、折角なんですが本修正は行わないことにします。
> 
> もし、何か不具合があるとか、修正するとこういうメリットがあると
> いうことがあればご指摘ください。

修正しないことによる不具合も、修正することによるメリットも特に
ありません。ソースを眺めていて気になったというだけのことです。
-- 
Shigekazu Aoyagi <aoyagi @ kyf.biglobe.ne.jp>



Namazu-users-ja メーリングリストの案内