$$database_handle = DBI->connect( map { my $s = "database_$_"; exists $arguments{$_} ? $arguments{$_} : $s->() } qw(data_source_name username password taint) ) or die "Could not connect to the ". "database: $DBI::errstr"; #### sub database_username { return "fred"; } #### my %defaults = ( data_source_name => ".....", username => "fred", password => "fred", taint => { Taint => 1 } ); # then later... %arguments = (%defaults, %arguments); my $dbh = DBI->connect( @arguments{ qw(data_source_name username password taint) }) or die "Could not connect to the database: ". "$DBI::errstr"; #### my %defaults = ( data_source_name => \&database_data_source_name, username => \&database_username, password => \&database_password, taint => \&database_taint, ); # and later: my $dbh = DBI->connect ( map { exists $arguments{$_} ? $arguments{$_} : $defaults{$_}() } qw(data_source_name username password taint) ) or die "Could not connect to the database: ". "$DBI::errstr"; # and somewhere else: sub database_data_source_name { # read stuff from file.. # do other stuff return #something } #### map { exists $arguments{$_} ? $arguments{$_} : ${\"database_$_"}->() }