x.x.x.x

| HOME | FrontPage | 記事編集 | RSS |

やっぱりuse warningsを使おう   Perl

Perlのプラグマについて、use strictはmod_perlに必須なので良いとして、use warningsは鬱陶しいだけだと思ってた。でもそうじゃなかった。下のスクリプトはサブルーチンaaaが重複しているにも関わらず、aaaを表示して正常終了します。

#! /usr/bin/env perl
use strict;

aaa();

sub aaa
{
    print "aa\n";
}

sub aaa
{
    print "aaa\n";
}

use warningsを使えば警告が出ます。
通常use strict下でサブルーチンをオーバーライドする時はこんなことをします。

no strict 'refs';
*{ $caller . "::" . $name } = sub
{
    print 'aaa';
}

異なるパッケージのサブルーチンオーバーライド時はこんなわけのわからないことを書かなきゃいけないのに、同一パッケージ内のサブルーチンはいくらでもオーバーライド出来てしまう。しかしながら異なるパッケージのサブルーチンをオーバーライドする動機はあっても、同一パッケージのサブルーチンをオーバーライドする動機はほとんど無く、大抵しょうもないバグです。直しても直しても直らず、よく見たらスクリプトの最後にちょこっと重複サブルーチン名が書いてある、みたいな。

そういうわけでuse warningsもなるべく使おう。
まさかstrictに引っかからないとは思わなかった。

BlogMode speed member / 2008.12.11 23:02

These pages are designed for NN7 & IE6.
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.

Valid XHTML 1.0 Strict Valid CSS!