Declared args:
% my %decl = %{$comp->declared_args};
% while (my ($key,$val) = each(%decl)) {
<% $key %><% (defined($val->{default})) ? "=>".$val->{default} : "" %>
% }

This is <% $comp->first_time ? '' : 'not ' %>my first time.
I am <% $comp->is_subcomp ? '' : 'not ' %>a subcomponent.
I am <% $comp->is_file_based ? '' : 'not ' %>file-based.
% if (defined($comp->name)) {
My short name is <% $comp->name =~ /anon/ ? '[anon something]' : $comp->name %>.
% }
% if ($comp->is_subcomp and defined($comp->parent_comp)) {
My parent component is <% $comp->parent_comp->title %>.
% }
% if (defined($comp->dir_path)) {
My directory is <% $comp->dir_path %>.
% }
I have run <% $comp->run_count %> time(s).
% my @subkeys = sort keys(%{$comp->subcomps});
I have <% scalar(@subkeys) %> subcomponent(s).
% if (@subkeys) {
Including one called <% $comp->subcomps($subkeys[0])->name %>.
% }
My title is <% $comp->title =~ /anon/ ? '[anon something]' : $comp->title %>.

% if (defined($comp->cache_file)) {
%   my ($subfile) = ($comp->cache_file =~ m{data/[^/]+/(cache/.*?)$});
%   if (defined($subfile)) {
My cache file is /.../<% $subfile %>
%   }
% }
% if (defined($comp->object_file)) {
%   my ($subfile) = ($comp->object_file =~ m{data/[^/]+/(obj/.*?)$});
%   if (defined($subfile)) {
My object file is /.../<% $subfile %>
%   }
% }
% if (defined($comp->path)) {
My path is <% $comp->path %>.
% }
% if (defined($comp->fq_path)) {
My fq_path is <% $comp->fq_path =~ /anon/ ? '[anon something]' : $comp->fq_path %>.
% }
% if ($comp->is_file_based and defined($comp->source_file)) {
%   my ($subfile) = ($comp->source_file =~ m{((alt_root|comps)/.*?)$});
My source file is /.../<% $subfile %>
% }
% if ($comp->is_file_based and defined($comp->source_dir)) {
%   my ($subfile) = ($comp->source_dir =~ m{((alt_root|comps)/.*?)$});
My source dir is /.../<% $subfile %>
% }

<%args>
$comp
</%args>
