青柳です。
On Wed, 22 Jun 2011 21:29:33 +0900
Tasamasa Teranishi <[email protected]> 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 <[email protected]>
_______________________________________________
Namazu-users-ja mailing list
[email protected]
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja