2011年6月23日

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

青柳です。

On Wed, 22 Jun 2011 21:29:33 +0900
Tasamasa Teranishi <yw3t-trns@xxxxx> 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@xxxxx>

_______________________________________________
Namazu-users-ja mailing list
Namazu-users-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja


投稿者 xml-rpc : 2011年6月23日 10:49
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/104647
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。