my $factory = Config::Builder->new qw( user => user admin => admin htmldir => %path $basedir html userdir => %path $htmldir $user admindir => %path $htmldir $admin email => %join $username @ $domain ); my $values = read_your_config_file(); # returns a hash of values my $config = $factory->make_config($values); print "user dir is ".$config->("userdir")."\n"; print "admin dir is ".$config->("userdir")."\n"; #### $values = { basedir => "/base/dir" } /base/dir/html/user /base/dir/html/admin ---- #### $values = { basedir => "/base/dir", user => "customuser", } /base/dir/html/customuser /base/dir/html/admin --- #### $values = { basedir => "/base/dir", htmldir => "/custom/html/dir", } /custom/html/dir/user /custom/html/dir/admin #### my $c = read_your_config_file(); # returns a hash of values use File::Spec::Functions; $c->{user} ||= "user"; $c->{admin} || = "admin"; $c->{htmldir} ||= catfile($c->{basedir}, $c->{html}); $c->{userdir} ||= catfile($c->{htmldir}, $c->{user}); $c->{admindir} ||= catfile($c->{htmldir}, $c->{admin}); $c->{email} ||= "$c->{username}\@$c->{domain}";