$opt_parser->getoptions( "configfile=s" => \$configfile );
my $cfmeta = $class->meta->find_attribute_by_name('configfile');
+ my $init_arg = $cfmeta->init_arg;
# was it passed to the constructor?
if (!defined $configfile)
{
- my $key = $cfmeta->init_arg;
- $configfile = $constructor_params->{$key} if defined $key;
+ $configfile = $constructor_params->{$init_arg} if defined $init_arg;
}
if(!defined $configfile) {
$configfile = $cfmeta->default
if not defined $configfile and $cfmeta->has_default;
- if (ref $configfile eq 'CODE') {
- # not sure theres a lot you can do with the class and may break some assumptions
- # warn?
- $configfile = &$configfile($class);
- }
+
+ # note that this will die horribly if the default sub depends on
+ # other attributes
+ $configfile = $configfile->($class) if ref $configfile eq 'CODE';
if (defined $configfile) {
$config_from_file = try {
$class->get_config_from_file($configfile);
die $_ unless /Specified configfile '\Q$configfile\E' does not exist/;
};
}
+
+ $constructor_params->{$init_arg} = $configfile
+ if defined $configfile and defined $init_arg;
}
else {
$config_from_file = $class->get_config_from_file($configfile);