プロトタイプ宣言のワーニングについて
関数のプロトタイプ宣言と、それに関するwarningsプラグマについてお教えください。
関数のプロトタイプ宣言は、その関数を呼び出す側がコンパイルされる時点で、すでに存在する必要があり、また、use warningsによってプラグマを有効にしておくと、遅いプロトタイプ宣言について警告してくれると理解していました。
以下の2例は、どちらもプロトタイプ宣言が遅いために、うまくプロトタイプが働かない例です。
しかし、(例1)ではwarningが表示されるのに対し、(例2)では表示されません。
どこか私の理解が誤っているのかと思うのですが、このようになる理由についてご教授いただきたく、よろしくお願いいたします。
■ (例1)
#!/usr/bin/env perl
# -*- mode: cperl; coding:utf-8 -*-
use strict;
use warnings;
my @a= 1..4;
mypush( @a, 5..8);
print join( ",", @_), "\n";
sub mypush(@@){
if( @_== 2){
print "ok.\n";
}else{
print "Prototypes does not work, arg. num=", 0+ @_, "\n";
}
}
□(出力1)
main::mypush() called too early to check prototype at ./chk_prototype.pl line 10.
Prototypes does not work, arg. num=8
■(例2)
#!/usr/bin/env perl
# -*- mode: cperl; coding:utf-8 -*-
use strict;
use warnings;
test_2();
exit 0;
sub test_2{
my @a= 1..4;
mypush( @a, 5..8);
print join( ",", @_), "\n";
}
exit 0;
sub mypush(@@){
if( @_== 2){
print "ok.\n";
}else{
print "Prototypes does not work, arg. num=", 0+ @_, "\n";
}
}
□(出力2)
Prototypes does not work, arg. num=8
----
なお、Perlは、
perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
を使用しております。