We can make use of Config::Simple module for this.
This library supports parsing, updating and creating configuration files.
Main Features of Config::Simple are as mentioned below:
1) It allows to read config file in different formats/styles like INI-FILE format and HTML format.
2) It allows to read config file in the form of objects and access the variables from the object.
3) It allows to fetch all the variables at into a hash/hashref using "vars" method.
Let's discuss how can we read/modify/write config files easily in perl as mentioned below :
Reading config file in INI-FILE (ini) style
Reading config file in HTTP-LIKE style
Creating config file in INI style
1) Reading/Updating config file in INI-FILE (ini) style
If the configuration file has different blocks, then this style is very useful
Let's explain with the below mentioned example
db_ini.cfg
Script
db_ini.cfg Output
2) Reading/Updating config file in HTTP-LIKE style
When we just key and value pairs, this simple HTTP-Like style works.
Let's explain with the below mentioned example
db_http.cfg
Script
db_http.cfg Output
3) Creating config file in INI style
Creating a config file is explained as mentioned below.
$cfg = new Config::Simple(syntax=>'ini');
$cfg->write("test.cfg");
Supported "syntax" keywords are "ini", "simple" or "http"
write()
Alternatively, you can pass a name to either write() or save() to indicate the name of the file to create instead of modifying existing configuration file
Since we are trying to create a new config file, we need to pass the file name.
Script
test.cfg Output
This library supports parsing, updating and creating configuration files.
Main Features of Config::Simple are as mentioned below:
1) It allows to read config file in different formats/styles like INI-FILE format and HTML format.
2) It allows to read config file in the form of objects and access the variables from the object.
3) It allows to fetch all the variables at into a hash/hashref using "vars" method.
Let's discuss how can we read/modify/write config files easily in perl as mentioned below :
Reading config file in INI-FILE (ini) style
Reading config file in HTTP-LIKE style
Creating config file in INI style
1) Reading/Updating config file in INI-FILE (ini) style
If the configuration file has different blocks, then this style is very useful
Let's explain with the below mentioned example
db_ini.cfg
[mysql] host=DBI:mysql:host login=mysql_user password=mysql_pass db_name=test RaiseError=1 PrintError=1 [oracle] host=DBI:oracle:host login=oracle_user password=oracle_pass db_name=oracle_db RaiseError=1 PrintError=1
Script
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Config::Simple; my $cfg = new Config::Simple('db_ini.cfg'); #Get Values from Config File print "\n MySql DB Name : " . $cfg->param("mysql.db_name"); print "\n MySql DB Password : " . $cfg->param("mysql.password"); print "\n\n Oracle DB Name : " . $cfg->param("oracle.db_name"); print "\n Oracle DB Password : " . $cfg->param("oracle.password"); #Set/Update Values Config File $cfg->param("mysql.db_name", "new_mysql_db_name"); $cfg->param("mysql.password", "new_mysql_password"); print "\n\n MySql DB Name : " . $cfg->param("mysql.db_name"); print "\n MySql DB Password : " . $cfg->param("mysql.password"); $cfg->param("oracle.db_name", "new_orcl_db_name"); $cfg->param("oracle.password", "new_orcl_password"); print "\n\n Oracle DB Name : " . $cfg->param("oracle.db_name"); print "\n Oracle DB Password : " . $cfg->param("oracle.password"); #Adding a new Variable to Config File $cfg->param("mysql.new_var", "mysql_adding_variable"); print "\n\n MySql New Var : " . $cfg->param("mysql.new_var"); $cfg->param("oracle.new_var", "oracle_adding_variable"); print "\n\n Oracle New Var : " . $cfg->param("oracle.new_var"); print "\n\n Deleting Mysql New Var 'new_var' ... "; $cfg->delete('mysql.new_var'); # deletes 'new_var' from [mysql] block print "\n\n Deleting Oracle New Var 'new_var' ... "; $cfg->delete('oracle.new_var'); # deletes 'new_var' from [oracle] block #Config Vars #Config::Simple also supports vars() method, which, depending on the context used, returns all the values either as hash or hashref my %Config = $cfg->vars(); print "\n\n Config Hash Obj : " . Dumper(\%Config); my $config_ref = $cfg->vars(); print "\n\n Config Hash Ref : " . Dumper($config_ref);
db_ini.cfg Output
MySql DB Name : test MySql DB Password : mysql_pass Oracle DB Name : oracle_db Oracle DB Password : oracle_pass MySql DB Name : new_mysql_db_name MySql DB Password : new_mysql_password Oracle DB Name : new_orcl_db_name Oracle DB Password : new_orcl_password MySql New Var : mysql_adding_variable Oracle New Var : oracle_adding_variable Deleting Mysql New Var 'new_var' ... Deleting Oracle New Var 'new_var' ... Config Hash Obj : $VAR1 = { 'mysql.PrintError' => '1', 'mysql.db_name' => 'new_mysql_db_name', 'oracle.password' => 'new_orcl_password', 'oracle.host' => 'DBI:oracle:host', 'mysql.host' => 'DBI:mysql:host', 'mysql.password' => 'new_mysql_password', 'oracle.PrintError' => '1', 'oracle.login' => 'oracle_user', 'mysql.RaiseError' => '1', 'oracle.db_name' => 'new_orcl_db_name', 'oracle.RaiseError' => '1', 'mysql.login' => 'mysql_user' }; Config Hash Ref : $VAR1 = { 'mysql.PrintError' => '1', 'oracle.password' => 'new_orcl_password', 'mysql.db_name' => 'new_mysql_db_name', 'oracle.host' => 'DBI:oracle:host', 'mysql.host' => 'DBI:mysql:host', 'oracle.PrintError' => '1', 'mysql.password' => 'new_mysql_password', 'oracle.login' => 'oracle_user', 'mysql.RaiseError' => '1', 'oracle.db_name' => 'new_orcl_db_name', 'oracle.RaiseError' => '1', 'mysql.login' => 'mysql_user' };
2) Reading/Updating config file in HTTP-LIKE style
When we just key and value pairs, this simple HTTP-Like style works.
Let's explain with the below mentioned example
db_http.cfg
host:'DBI:mysql:host' login:user password:secret db_name:test RaiseError:1 PrintError:1
Script
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Config::Simple; my $cfg = new Config::Simple('db_http.cfg'); #Get Values from Config File print "\n DB Name : " . $cfg->param("db_name"); print "\n DB Password : " . $cfg->param("password"); #Set/Update Values Config File $cfg->param("db_name", "new_db_name"); $cfg->param("password", "new_password"); print "\n\n DB Name : " . $cfg->param("db_name"); print "\n DB Password : " . $cfg->param("password"); #Adding a new Variable to Config File $cfg->param("new_var", "adding_variable"); print "\n\n New Var : " . $cfg->param("new_var"); print "\n\n Deleting New Var 'new_var' ... "; $cfg->delete('new_var'); # deletes 'new_var' #Config Vars #Config::Simple also supports vars() method, which, depending on the context used, returns all the values either as hash or hashref my %Config = $cfg->vars(); print "\n\n Config Hash Obj : " . Dumper(\%Config); my $config_ref = $cfg->vars(); print "\n\n Config Hash Ref : " . Dumper($config_ref);
db_http.cfg Output
DB Name : test DB Password : secret DB Name : new_db_name DB Password : new_password New Var : adding_variable Deleting New Var 'new_var' ... Config Hash Obj : $VAR1 = { 'db_name' => 'new_db_name', 'password' => 'new_password', 'RaiseError' => '1', 'PrintError' => '1', 'login' => 'user', 'host' => 'DBI:mysql:host' }; Config Hash Ref : $VAR1 = { 'db_name' => 'new_db_name', 'password' => 'new_password', 'RaiseError' => '1', 'host' => 'DBI:mysql:host', 'login' => 'user', 'PrintError' => '1' };
3) Creating config file in INI style
Creating a config file is explained as mentioned below.
$cfg = new Config::Simple(syntax=>'ini');
$cfg->write("test.cfg");
Supported "syntax" keywords are "ini", "simple" or "http"
write()
Alternatively, you can pass a name to either write() or save() to indicate the name of the file to create instead of modifying existing configuration file
Since we are trying to create a new config file, we need to pass the file name.
Script
$cfg = new Config::Simple(syntax=>'ini'); $cfg->param("mysql.dsn", "DBI:mysql:db;host=localhost.com"); $cfg->param("mysql.user", "username"); $cfg->param("mysql.pass", 'secret'); $cfg->write("test.cfg");
test.cfg Output
[mysql] dsn:mysql:db;host=localhost.com user:username pass:secret