Saturday, June 29, 2013

How could you parse config file with "key=value" format with a header in Perl?

my %params = ();
my $INIFILE='config.ini';

open (INI, $INIFILE) || die "could not open $INIFILE - $!";

while (<INI>)
{
chomp($_);
if($_=~/^#/ || $_=~/^;/ || $_=~/^\/\//)
{
#ignore these lines coz they are comments!
}
elsif($_=~/^$/)
{
#ignore these lines coz they are blank!
#die "Blank line detected at $.\n";
}
elsif ($_ =~ /^\[(.+)\]/) #extract string enclosed in '[]'
{
$header = $1;
}
else
{
my ( $key, $value ) = split( /=/, $_ );
$params{$header}{$key} = $value;
}
}

foreach $header(keys %params)
{
  print "$header: ";
  foreach $subheader (sort keys %{$params{$header}})
  {
    print "$subheader = $params{$header}{$subheader} ";
  }
  print "\n";
}

#To access individual key, value
print $params{'DEV'}{'url'};
-----------------------------------------------------------------
config.ini:

[DEV]
server=rocket
port=8080
url=http://dev.single-ticket.com/

[QA]
server=princeton
port=8081
url=http://beta.single-ticket.com/

[PROD]
server=saboo
port=8082
url=http://www.single-ticket.com/

How could you parse config file with "key=value" format in Perl?

my %params = ();
my $INI_FILE='config.ini';

open (INI, $INI_FILE) || die "could not open $INI_FILE - $!";

while (<INI>)
{
     chomp($_);
     if($_=~/^#/ || $_=~/^;/ || $_=~/^\/\//)
     {
          #ignore these lines coz they are comments!
     }
     elsif($_=~/^$/)
     {
          #ignore these lines coz they are blank!
     }
     else
     {
          my ( $key, $value ) = split( /=/, $_ );
          $params{ $key } = $value;
     }
}

foreach (sort keys %params)
{
     print "$_ = $params{$_}\n";
}

#Get value for individual key
print $params{url};
----------------------------------------------
config.ini:

dev_server=singleton
dev_port=8081
dev_url=http://dev.single-ticket.com/

server=mingleton
port=8080
url=http://www.single-ticket.com/

Friday, June 28, 2013

How could you remove wide characters in Perl?

$content =~ s/[^\x00-\x7f]//g;

How could you transpose a matrix in Perl?

my @arr = (['a','b','c'],
                    ['h','i','j'],
                    ['x','y','z']);

for (  $i=0; $i<=$#arr; $i++ )
{
        print join(",", (map $_->[$i], @arr));
        print "\n";
}