my %defaults = ( param1 => 'default1', param2 => 'default2' ); my $config = 'default.config'; GetOptions("config|c=s" => \$config, "param1=s" => \$opt{param1}, "param2=s" => \$opt{param2}); %defaults = (%defaults, read_config_file($config)); while (my ($param, $value) = each %defaults) { $opt{$param} = $value unless defined $opt{$param}; }