名前空間

今まで名前空間にもmainが一番上に来る箒上の順序があるもんだと思ってたんだけども、
実は無いみたい。

#!/usr/bin/perl

use strict;
use warnings
BEGIN{ $| = 1;print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT");print "start  <br/>"; }
package aaa;
BEGIN{print "aaastart <br/>";}
sub say{
	my $class = shift;
	my $say = "hello aaa <br/>";
	$class->output($say);
}
sub output{
	my ($this,$arg) = @_;
	print $arg;}
1;
package Test;
print "hello world  <br/>";
BEGIN{print "end <br/>" ;}
aaa->say;

1;
1;

こんな感じに適当に打ってやると
普通にサブルーティン以外は、BEGINが上から処理された。びっくりだ。
つまり、main空間は使わなくても問題ないで
初期実行のみサブルーティンで囲わず書いとくと、スタート地点を擬似的に制御できるみたい。
NanoA見てて、なんでスタートがmain空間に無かったのか、どうやってNanoAルーティンから開始していたのか、
ようやく納得。


と言うか、こんな基本的なことも知らなかった事に驚きを隠せない。