I think that if you store your values in a hash rather than individual variables then you'll find your system will be much easier to extend.
Here's a first draft of how I'd do it. It creates a hash called %cnf and the way the hash is built is controlled by another (potentially confusingly named) has called %config. In this example, 'to' and 'from' are set in the user input (simulated with the DATA filehandle) and the 'subject' is set from a default.
use strict; use warnings; sub subject { 'Subject: default subject'; } sub to { 'To: default_to@example.com'; } sub from { 'From: default_from@example.com'; } my %config = ( to => { regex => '^To:\s', sub => \&to }, from => { regex => '^From:\s', sub => \&from }, subject => { regex => '^Subject:\s', sub => \&subject }, ); my %cnf; # Load user data foreach (<DATA>) { chomp; foreach my $c (keys %config) { if (/$config{$c}{regex}/) { $cnf{$c} = $_; last; } } } # Look for missing values and fill in defaults foreach (keys %config) { unless (exists $cnf{$_}) { $cnf{$_} = $config{$_}{sub}->(); } } use Data::Dumper; print Dumper \%cnf; __DATA__ To: foo@example.com From: bar@example.com
"The first rule of Perl club is you do not talk about
Perl club."
-- Chip Salzenberg
In reply to Re: Config file default options?
by davorg
in thread Config file default options?
by sanjay nayak
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |