Module::SetupでWeb Application作るときの雛形を作ろうと思ったんですが、テンプレートファイルに渡ってくるパラメータがいまいちわからなかったので、コードを読んでみました。
ファイルに渡ってくる変数
実際のテンプレート作成はModule::Setupのcreate_skeletonというメソッドで行っています。
sub create_skeleton { my $self = shift; my $config = $self->config; $self->{distribute} = Module::Setup::Distribute->new( $config->{module}, target => $config->{target}, ); $self->call_trigger( 'after_setup_module_attribute' ); $self->distribute->dist_path->mkpath; my $template_vars = { module => $self->distribute->module, dist => $self->distribute->dist_name, module_path => $self->distribute->module_path, module_unix_path => join('/', @{ $self->distribute->package }), config => $config, distribute => $self->distribute, localtime => scalar localtime, moniker => $self->distribute->package->[ scalar(@{ $self->distribute->package })-1 ], }; $self->call_trigger( after_setup_template_vars => $template_vars); $self->{distribute}->set_template_vars($template_vars); for my $path ($self->base_dir->flavor->template->find_files) { $self->{distribute}->install_template($self, $path); } $self->call_trigger( 'append_template_file' ); return $template_vars; }
この中の$template_varsが渡ってくるパラメータになります。順に説明すると
ファイル名に渡ってくる変数
Module::Setupでは____var-hogehoge-var____みたいな変数をファイル名に使うことができます。これはどうなっているかというとModule::Setup::Distributeに以下のようなコードが有りました。
$options->{dist_path} =~ s/____var-(.+?)-var____/$options->{vars}->{$1} || $options->{vars}->{config}->{$1}/eg;
この$options->{vars}には$template_varsが渡ってきているので、template_varsにわたしているパラメータなら____var-(変数名)-var____という名前でファイル名に使うことが出来ます。ちなみにファイル名がhoge/piyoとかであればちゃんとディレクトリも区切られます。
まとめ
というわけでコード読んでみたのをまとめてみました。間違って呼んでいる部分もあるかもしれませんので、そのあたりはご了承ください。。。