> please have a look at the code below and give comments

Here are some quick comments.

#1. Always "use strict"
#2. See #1.

When you "use strict" it foeces you to do things the "right way" and will
help catch errors because of the extra checks it makes.

So something like this:
> @dataFile=<>; # read in file from command line

Needs to be changed to this by explicitly declaring that variable:
my @dataFile=<>; # read in file from command line

> @standardRules=`cat standard.for.arf.txt` ;

This isn't portable (if you care for it to be), and does not check for
errors.  This might be better:

open IN, 'standard.for.arf.txt' or die $!;
my @standardRules = <IN>;
close IN;

> (@sitePVCs)=split(/;/,$siteAllPVCs,$siteNoOfPVCs);

The "(" and ")" force list context.  The array @sitePVCs will already force
list context without the parens.  This can be rewriten like this, which may
or may not be more readable to you:

my @sitePVCs = split(/;/,$siteAllPVCs,$siteNoOfPVCs);

> open(ARFfile, ">$siteARFfile") or die("can not open

Typically filehandles are in all caps.  They don't need to be, but it is the
usual way of doing things because it makes them easier to spot (especially
to people other than the author).  Also the parens are not needed because
"or" has very low precedence.  I also tend to put my error condition on the
next line, but that is just my preference.

open ARFFILE, ">$siteARFfile"
  or die "can not open '$siteARFfile': $!";

Again, parens not needed here, but they don't hurt either:

> print ARFfile ("@standardRules\n"); #print standard bits
print ARFFILE "@standardRules\n"; #print standard bits

This is pretty icky:
>    print ARFfile ("name matches  \".*RH-Serial.*\":
> {\n \tsetName(\"$SiteName-RH-WAN\$2\") ;\n \tsetGroup
> (\"$siteGroup\") ..<snip>.."); # print RH-Serial rule

Try a here-document instead:

# print RH-Serial rule
print ARFFILE <<EOF;
name matches  ".*RH-Serial.*": {
    setName("$SiteName-RH-WAN\$2");
    setGroup("$siteGroup");
    setAlias("$siteCCTReff");
    setSpeedIn("$siteACRate");
    setSpeedOut("$siteACRate");
    setDeviceSpeedIn("$siteACRate");
    setDeviceSpeedOut("$siteACRate");
}
EOF

It makes it a lot easier to read, not to mention I could remove the \n and
the \" escapes.  BTW - If you have quotes in your string you can do this
qq[a "blah" b] instead of "a \"blah\" b".  The char following the "qq" can
be any char, so you could use qq{}, qq||, qq**, etc.

In general there isn't anything *wrong* with the script... but "use strict"
is STRONGLY encouraged.  The rest are just suggestions for readability.

Rob

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Thursday, November 06, 2003 11:34 AM
To: [EMAIL PROTECTED]
Subject: RFC on first perl script




Hi all
 well im trying at lerning this perl stuff.. reading from the "learning
perl" oreilly book and a few other places,
but also using perl a long time before i should ie making the below script,
so that i dont get in to any very bad habbits at such an early stage.
could some one please have a look at the code below and give comments, the
code does do what i want it to ( well at leest from this stage).


#!/usr/bin/perl -w
############################################################
# this function creates a arf rule file from an input file
# Version 0.1 6/11/03
############################################################
@dataFile=<>; # read in file from command line
@standardRules=`cat standard.for.arf.txt` ;

foreach $site (@dataFile) {  # loop  for each line/site in dataFile
        chomp $site;

        ($siteLink,$siteNoOfPVCs,$siteAllPVCs)=split(/:/,$site,3); #split
up main / pvc info
 
($siteIP,$siteString,$SiteName,$siteGroup,$siteCCTReff,$siteACRate)=split(/,
/,$siteLink,6);
#split up main info
        (@sitePVCs)=split(/;/,$siteAllPVCs,$siteNoOfPVCs);

        my $siteARFfile = "$siteIP.arf";
        open(ARFfile, ">$siteARFfile") or die("can not open
'$siteARFfile': $!");

        print ARFfile
("######################################################################
\n# \n# Discover Rule for:
$siteIP \n#
\n######################################################################
\n\n"); # print header

        print ARFfile ("@standardRules\n"); #print standard bits

        print ARFfile ("name matches  \".*-Cpu-.*\": {\n \tsetName
(\"$SiteName-RH-Cpu\") ;\n \tsetGroup (\"$siteGroup\")
;\n \tsetAlias (\"RH-Cpu\") ;\n} \n\n" ); # print -Cpu- rule

        print ARFfile ("name matches  \".*-RH\": { \n \tsetName
(\"$SiteName-RH\") ;\n \tsetGroup (\"$siteGroup\") ; \n \t
setAlias (\"RH\") ;\n} \n\n" ); # print -RH rule

        print ARFfile ("name matches  \".*RH-Serial.*\": {\n \tsetName
(\"$SiteName-RH-WAN\$2\") ;\n \tsetGroup (\"$siteGr
oup\") ;\n \tsetAlias (\"$siteCCTReff\") ;\n \tsetSpeedIn
(\"$siteACRate\") ;\n \tsetSpeedOut (\"$siteACRate\") ;\n \tsetD
eviceSpeedIn (\"$siteACRate\") ;\n \tsetDeviceSpeedOut (\"$siteACRate\")
;\n} \n\n"); # print RH-Serial rule


        print ARFfile ("name matches  \".*-Serial.*\": {\n \tsetName
(\"$SiteName-WAN\$2\") ;\n \tsetGroup (\"$siteGroup\"
) ;\n \tsetAlias (\"$siteCCTReff\") ;\n \tsetSpeedIn (\"$siteACRate\") ;\n
\tsetSpeedOut (\"$siteACRate\") ;\n \tsetDevice
SpeedIn (\"$siteACRate\") ;\n \tsetDeviceSpeedOut (\"$siteACRate\") ;\n}
\n\n"); # print -Serial rule

        for ($i = 0; $i < $siteNoOfPVCs ; $i++ ) { # loop for each PVC

 
($PVCdlci,$PVCname,$PCVreff,$PVCcir)=split(/,/,"$sitePVCs[$i]",4);
# split out pvc info

                print ARFfile ("name matches  \".*-dlci-$PVCdlci\": {\n
\tsetName (\"$SiteName-$PVCname\") ;\n \tsetGroup
(\"$siteGroup\") ;\n \tsetAlias (\"$PCVreff\") ;\n \tsetSpeedIn
(\"$PVCcir\") ;\n \tsetSpeedOut (\"$PVCcir\") ;\n \tsetDev
iceSpeedIn (\"$PVCcir\") ;\n \tsetDeviceSpeedOut (\"$PVCcir\") ;\n}
\n\n"); # print PVC rules


        }

        close(ARFfile) or die("can not close '$siteARFfile': $!");
}



---
fnord
yes im a Concord Engineer, no it never flown!



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to