| Register documentation | Contained in the Register distribution. |
Register::Generic - Implementation of the windows ini like structure
use Register;
$genreg=new Register::Generic (
'regpath' => "/home/myprog",
'regname' => "INITFILE"
);
$genreg->savesettings("SECTION","KEY","VALUE");
$value=$genreg->getsettings("SECTION","KEY");
$sections=$genreg->getsections;
$genreg->deletesettings(,"SECTION","KEY");
$genreg->deletesection("SECTION");
The Register::Generic module permit to create an ini file like Windows for save generic information about your program. With the use of CSV dbd , the file created is readable by DBI without problem. Here CSV table specifics:
FIELD_NAME FIELD_TYPE ---------------------------------- R_SECTION CHAR R_KEY CHAR R_VALUE CHAR
The <new> statament create the Register::Generic object and return the reference to him.
$genreg=new Register::System ( 'regpath' => "/home/myprog", 'regname' => "INIFILE" );
Parameter :
regpath specify the path where new statament search for file. regname specify the name of the file to use.
Finaly if regpath don't exist the program return an error message at compile time, if the register don't exist it is maked.
The savesettings function , save the value argument in the key of the section of the program.
$genreg->savesettings("SECTION","KEY","VALUE");
If the key don't exist it make (it make also section without specify befor), else if key already exist and value is different from previous it update value.
The getsettings function retrieve the value of the specified key.
$value=$genreg->getsettings("SECTION","KEY");
The getsections function retrieve the section in the ini file and return an array.
@sections=$genreg->getsections;
The deletesettings function delete the entry key specified.
$genreg->deletesettings("SECTION","KEY");
The deletesection function delete the entry section specified.
$genreg->deletesection("SECTION");
Vecchio Fabrizio <jacote@tiscalinet.in>
| Register documentation | Contained in the Register distribution. |
package Register::Generic; use DBI; require Exporter; sub new { my $type=shift; my %params=@_; my $self={}; my $name="${type}::new"; $self->{'Type'}=$type; my $regpath = Register::checkReq ($name, "regpath", $params{'regpath'}); my $regname = Register::checkReq ($name, "regname", $params{'regname'}); ($self->{'REGISTER_NAME'}=$regname)=~s/(\W)//g; $self->{'DBH'}=DBI->connect("DBI:CSV:f_dir=".$regpath,"",""); if (!(-d $regpath)) { printf "ERROR:\n"; printf "LOCATION: \<".$self->{'Type'}."\>\n"; printf "CAUSE: directory \<".$regpath."\> not found !!!\n"; exit(1); }; if (!(-f $regpath."/".$self->{'REGISTER_NAME'})) { my($sql)=qq { CREATE TABLE $self->{'REGISTER_NAME'} ( R_SECTION CHAR(255), R_KEY CHAR(255), R_VALUE CHAR(255) ) }; $self->{DBH}->do($sql); }; bless $self; } sub getsettings { my $self=shift; my ($SEC,$KEY)=@_; my ($row)={}; $row->{'R_VALUE'}=""; my ($sql) = qq { SELECT * FROM $self->{'REGISTER_NAME'} WHERE R_SECTION=? AND R_KEY=? }; my($sth)=$self->{DBH}->prepare($sql); $sth->execute($SEC,$KEY); $row=$sth->fetchrow_hashref; if ($row->{'R_VALUE'} ne "") { return $row->{'R_VALUE'}; } else { return ""; }; } sub getsections { my $self=shift; my ($oldsec)=""; my (@retval)=(); my ($row)={}; my ($sql) = qq { SELECT R_SECTION FROM $self->{'REGISTER_NAME'} ORDER BY R_SECTION }; my($sth)=$self->{DBH}->prepare($sql); $sth->execute(); while ($row=$sth->fetchrow_hashref) { if ($oldsec ne $row->{R_SECTION}) { push @retval,$row->{R_SECTION}; $oldsec=$row->{R_SECTION}; }; }; $sth->finish; return @retval; }; sub savesettings { my $self=shift; my ($SEC,$KEY,$VAL)=@_; my ($row)={}; my($sql) = qq { SELECT * FROM $self->{'REGISTER_NAME'} WHERE R_SECTION=? AND R_KEY=? }; my($sth)=$self->{DBH}->prepare($sql); $sth->execute($SEC,$KEY); $row=$sth->fetchrow_hashref; if ($row->{'R_SECTION'} ne "") { $self->updatekey($SEC,$KEY,$VAL); } else { $self->addkey($SEC,$KEY,$VAL); }; $sth->finish(); } sub deletesection { my $self=shift; my($SEC)=@_; $sql=qq { DELETE FROM $self->{'REGISTER_NAME'} WHERE R_SECTION=? }; $self->{DBH}->do($sql,undef,$SEC); } sub deletesettings { my $self=shift; my($SEC,$KEY)=@_; my($sql)=qq { DELETE FROM $self->{'REGISTER_NAME'} WHERE R_SECTION=? AND R_KEY=? }; $self->{DBH}->do($sql,undef,$SEC,$KEY); } sub updatekey { my $self=shift; my ($SEC,$KEY,$VAL)=@_; my($sql)=qq { UPDATE $self->{'REGISTER_NAME'} SET R_VALUE=? WHERE R_SECTION=? AND R_KEY=? }; $self->{DBH}->do($sql,undef,$VAL,$SEC,$KEY); } sub addkey { my $self=shift; my ($SEC,$KEY,$VAL)=@_; my($sql)=qq { INSERT INTO $self->{'REGISTER_NAME'} ( R_SECTION, R_KEY, R_VALUE ) VALUES ( ?,?,? ) }; $self->{DBH}->do($sql,undef,$SEC,$KEY,$VAL); } 1;