Wednesday, April 13, 2011

Generating random unique codes in PERL

This post will teach you how to generate random unique codes in PERL. Just follow the simple steps below. Enjoy!!

1. Create an array of character set combination. Below was set to 29 alphanumeric characters excluding other characters with similarities.

my @arrCharset = split //, "abcdefhjkmnpqrstuvwxyz2345678"; # 29 alphanumeric characters

2. Set the number of random codes you want to generate and set it into the loop.

$intCodes = 540000; # this will generate 540,000 random codes.
for ($i=1; $i<=$intCodes; $i++)
{
  ##.......... see step #3 ..........
  ##.......... see step #5 ..........
}

3. Inside the loop in step #2, set the number of characters you wanted on each code and create a loop to generate random code.

$intCharCnt = 6; # this will generate 6 characters per code.
for ($l=1; $l<=$intCharCnt; $l++)
{
  ##.......... see step #4 ..........
}

4. Inside the loop in step #3, pick a random character in the character set in step #1 and generate the code. 

$intRand = int(rand(scalar(@arrCharset)));
$strCode .= $arrCharset[$intRand];

5. Once the code was generated, check this with hashes of codes if exists. If exists deduct the counter of random codes we set in step #2, If not then write to hash. This will make the generation of codes unique.

if (exists($hshCodes{$strCode}))
{
    $i --;
}
else
{
    $hshCodes{$strCode} = 1;
    print "$strCode\n";
}

Please see below for the complete random unique code generator.

#!/usr/bin/perl

my @arrCharset = split //, "abcdefhjkmnpqrstuvwxyz2345678"; # 29 alphanumeric characters
my %hshCodes;
my ($i, $l, $strCode);

$intCodes = 540000; # this will generate 540,000 random codes.
$intCharCnt = 6; # this will generate 6 characters per code.

for ($i=1; $i<=$intCodes; $i++)
{
  $strCode = '';
  for ($l=1; $l<=$intCharCnt; $l++)
  {
    $intRand = int(rand(scalar(@arrCharset)));
    $strCode .= $arrCharset[$intRand];
  }

  if (exists($hshCodes{$strCode}))
  {
    $i --;
  }
  else
  {
    $hshCodes{$strCode} = 1;
    print "$strCode\n";
  }
}


1;

Saturday, April 9, 2011

GREP command in linux / unix

GREP command searches the file for a lines match to a string, words, or characters we pass on.
Syntax: grep [-option] 'search word' /path/to/file

Options are as follows:
  • -i : to ignore word case.
  • -r : recursively read files under each directory.
  • -w : to get the matching word only.
  • -c : to count number of lines that the search word matches.
  • -P : to use regex command within the grep command.
  • -l : to list the file names matching the search word.
  • -v : to get lines that doesn't match the search word.

Sample GREP commands:

- default grep command without using an option.
$ grep 'word' /path/to/file

- ignoring word cases and matches
$ grep -i 'word'/path/to/file

- using regex to get all the lines that matches
$ grep -P "word1|word2" /path/to/file
$ grep -P "^word3" /path/to/file

- matching the exact words in a line
$ grep -w "word" /path/to/file

- get the file names that matches the search word.
$ grep -l "init()" /path/to/file*

- invert matches to the line
$ grep -v "word" /path/to/file

- grep command combining options and uses pipe to execute next grep command.
$ grep -ivP "word1|word2" /path/to/file
$ grep -i "word" /path/to/file | grep -vP "word2"

IN_ARRAY sub function in PERL

IN_ARRAY is one of the common functionality in PHP that searches data in an array - http://php.net/in_array. This function takes 2 parameters: (1) the search key and (2) the array stack, it returns boolean whether found or not.

This functionality lacks in Perl and with this post, we can now have it in Perl.

The function below follows the same parameters we set in PHP: in_array(<search key>, <array>). This function map the array into hash in which Perl can do searches and returns 1 or 0.

Hope you like it!! Enjoy!

sub in_array
{
     my ($search_key, @arr) = @_;

     my %items = map {$_ => 1} @arr;
     return (exists($items{$search_key})) ? 1 : 0;
}


Usage:

#!/usr/bin/perl

my @arr = ('Paul','Raf','Tina','Mich');

sub in_array
{
     my ($search_key, @arr) = @_;

     my %items = map {$_ => 1} @arr;
     return (exists($items{$search_key})) ? 1 : 0;
}

if (&in_array('Paul', @arr))
{
     print "Got you Paul!!\n";
}
else
{
     print "Paul not found!!\n";
}


1;


Output:

paulgonzaga:Perl paulgonzaga$ perl in_array.pl
Got you Paul!!
paulgonzaga:Perl paulgonzaga$

Sunday, April 3, 2011

File handling in PERL

We have 2 ways on how to write to a file in PERL.

The script below will create and write to a file overwritten the data inside the file. The script will automatically creates a file if it doesn't exist. An error will return if there's a file permission denied or directory path doesn't exist.

open FHFILE, "> file1.txt" or die "file can't be created: $!";
print FHFILE "test data\n";
close FHFILE;

The script below will create and append to a file. Same with #1, it automatically creates a file and an error will return if there's a file permission denied or directory path doesn't exist.

open FHFILE, ">> file1.txt" or die "file can't be created: $!";
print FHFILE "test data\n";
close FHFILE;

The script below will read the file then pass the data into an array. An error will return if file is not readable.

open FHFILE, "< file1.txt" or die "error reading file: $!";
@arrData = <FHFILE>;
close FHFILE;

Leadership 101


  • Leadership demands sacrifices for the near-term to receive lasting benefits. the longer we wait to make sacrifices, the harder they become. Successful people make important decisions early in their life, then manage those decisions the rest of their lives.
  • Growth does not happen by chance. If you want to be sure to grow, you need a plan something strategic, specific, and scheduled. it's a discipline that would need incredible determination from us.
  • Success comes by going the extra mile, working the extra hours, and investing the extra time. The same is true for us. If we want to get to excel in any segment of life, a little extra effort can help. Our efforts can go a long way if we only work a little smarter, listen a little better, push a little harder, and persevere a little longer.
  • Making a difference in your work is not about productivity; it's about people. When you focus on others and connect with them, you can work together to accomplish great things.
  • Envision a goal you'd like to reach. Make it big enough to scare you a little. Now write down a plan for moving toward it. Create mini-goals within the big goal, to set yourself up for continual progress. And include some risks, too. Set yourself up for success.
  • Leaders build margins, not image. A leader may be forced to take unpopular stands for the good of the company. Popularity isn't bad, but decisions made solely on the basis of popular opinion can be devastating. So take courage and make the right though sometimes painful choices.