In this post we will see some good practice while you write your Perl scripts . If you see my previous post Getting started with Awesome Perl I have discussed usage of default variable $_ while what we see in this post how good for a programmer is to use the default variable
It's for sure that the default variable ($_) does the work but when you have a large chunk of code , readability of the code will become a problem . Lets take a piece of code and analyze it .
Let's pass some sql data into an array like one shown below
my @data = `db2 "list tables for schema DB2INST1"`
Now the array @data is populated with some data , lets go and do some manipulations
Without mentioning the default variable $_
foreach (@tbsp){ chomp; s/^\s*//; s/\s*$//; print; }
This is what it actually looks like
foreach my $_ (@tbsp){ chomp($_); $_ =~ s/^\s*//; $_ =~ s/\s*$//; print $_; }
As the name implies Perl makes the $_ to take the default value even if you explicitly don't mention the variable to store the value.
Lets see where this default variable $_ will draw us into confusion
#!/usr/bin/perl use strict; use warnings; use diagnostics; my @data = `db2 "list tables for schema DB2INST1"`; foreach (@data){ chomp; s/^\s*//; s/\s*$//; print; } my @data = `db2set -lr`; foreach (@data){ chomp; s/^\s*//; s/\s*$//; print; } my @data = `db2 "select * from EMP"`; foreach (@data){ chomp; s/^\s*//; s/\s*$//; print; } my @data = `db2 "get dbm cfg"`; foreach (@data){ chomp; s/^\s*//; s/\s*$//; print $_; }
If you see I have passed 4 times 4 different types of input to the array @data at mentioned line numbers
my @data = `db2 "list tables for schema DB2INST1"`;
my @data = `db2set -lr`;
my @data = `db2 "select * from EMP"`;
my @data = `db2 "get dbm cfg"`;
For every input $_ is taking the respective array's (@data) data for that particular iteration and processes it in that respective foreach loop . Executing this script would produce all the inputs we have passed to the array @data.
Wow , Its working as it should but that's not our point . Our goal is to write a code that should have a good readability and help us to debug the code at a later time for not only the persom who wrote the script but for anyone who want to deal with it.
So if you see the code above there is a definite confusion of which $_ is handling which data or which input.So we make it better by following some coding standards.
Lazy Coding
foreach (@tbsp){ chomp; s/^\s*//; s/\s*$//; print; }
Relaible Code
foreach my $tbvar (@data){ chomp($tbvar); $tbvar =~ s/^\s*//; $tbvar =~ s/\s*$//; print $tbvar; }
Let's take some part of the above script and see how that looks
#!/usr/bin/perl use strict; use warnings; use diagnostics; my @data = `db2 "list tables for schema DB2INST1"`; foreach my $tbvar (@data){ chomp($tbvar)); $tbvar =~ s/^\s*//; $tbvar =~ s/\s*$//; print $tbvar ; } my @data = `db2set -lr`; foreach my $regvar (@data){ chomp($regvar)); $regvar =~ s/^\s*//; $regvar =~ s/\s*$//; print $regvar;
See now the readability of code is perfect , that you understand which variable is carrying which data in which iteration .
These are minute things that can be neglected but there is something called coding standards and for yourself to call a good programmer you need to follow these standards.
Are you a good programmer ?
Have a Nice Day
No comments:
Post a Comment