Reputation: 31
Hi So I created the following script for outputing to a wiki page. The problem is that I am not sure in how to format my output. Here is my code:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw/strftime/;
#use warnings;
my $TOTALIOS = 'totalios';
my $READP = 'readpe';
my $CACHEP = 'cachehit';
my $CKBSEC = 'currentkb';
my $MKBSEC = 'maximumkb';
my $CIOSEC = 'currentio';
my $MIOSEC = 'maxio';
my $DATESTORE = 'dates.sec';
my $DATECMD = strftime "%m/%d/%y", localtime;
my $TIOS = 'Tios';
my $READp = 'readp';
my $CACHEp = 'cachep';
my $CKBsec = 'ckbsec';
my $MKBsec = 'mkbsec';
my $CIOsec = 'ciosec';
my $MIOsec = 'miosec';
my ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR) = &mysubinput;
sub mysubinput
{
print "Enter the number for the datastore: \n";
my $STORENUM = <STDIN>;
chomp($STORENUM);
print "Enter the name for the datastore e.g: DataStore or ServerStore: \n";
my $STORENAME = <STDIN>;
chomp($STORENAME);
print "Enter the data store image prefix e.g. datastore or serverstore: \n";
my $IMGPREFIX = <STDIN>;
chomp($IMGPREFIX);
print "Enter the month MM: \n";
my $MONTH = <STDIN>;
chomp($MONTH);
print "Enter the day DD: \n";
my $DAY = <STDIN>;
chomp($DAY);
print "Enter the Year YYYY: \n";
my $YEAR = <STDIN>;
chomp($YEAR);
return ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR);
# print "$STORENUM $STORENAME $IMGPREFIX $MONTH $DAY $YEAR\n";
# print "Not a very interesting routine\n";
# print "This does the same thing every time\n";
# print "$TOTALIOS\n";
# print "Enter the number for the datastore: \n";
# $line = <STDIN>;
# chomp($line);
# print "$line\n";
# print "$DATECMD\n";
}
sub writedate
{
print "! $DATECMD\n";
}
sub writesections(mysubinput())
{
print "| [[File:$STORENAME-$STORENUM-$TIOS-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$READp-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$CACHEp-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$CKBsec-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$MKBsec-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$CIOsec-$MONTH-$DAY-$YEAR.png| 100px]]\n";
print "| [[File:$STORENAME-$STORENUM-$MIOsec-$MONTH-$DAY-$YEAR.png| 100px]]\n";
}
sub writepage
{
&mysubinput;
print "Go back to [[MD3000i-Perf]] \n";
print "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center \n";
print "|-\n";
print "! [[DataStore-1]]\n";
print "! [[DataStore-2]]\n";
print "! [[DataStore-3]]\n";
print "! [[DataStore-4]]\n";
print "! [[DataStore-5]]\n";
print "! [[DataStore-6]]\n";
print "! [[DataStore-7]]\n";
print "! [[DataStore-8]]\n";
print "! [[DataStore-9]]\n";
print "|-\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "| [[File:disk.png |60px]]\n";
print "|}\n";
print "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center\n";
print "|-\n";
&writedate;
print " |-\n";
&writesections;
print " |-}\n";
}
#&mysubinput;
&writepage;
#&mysubinput;
#&writesections;
Using this approach things seem to work. However, my input is not 100% right. I have to input all my data twice, before the program can spit somthing ....
Enter the number for the datastore:
1
Enter the name for the datastore e.g: DataStore or ServerStore:
DataStore
Enter the data store image prefix e.g. datastore or serverstore:
datastore
Enter the month MM:
12
Enter the day DD:
03
Enter the Year YYYY:
2012
Enter the number for the datastore:
1
Enter the name for the datastore e.g: DataStore or ServerStore:
DataStore
Enter the data store image prefix e.g. datastore or serverstore:
datastore
Enter the month MM:
12
Enter the day DD:
03
Enter the Year YYYY:
2012
Go back to [[MD3000i-Perf]]
{| border=1 cellspacing=5 cellpadding=2 style=text-align: center
|-
! [[DataStore-1]]
! [[DataStore-2]]
! [[DataStore-3]]
! [[DataStore-4]]
! [[DataStore-5]]
! [[DataStore-6]]
! [[DataStore-7]]
! [[DataStore-8]]
! [[DataStore-9]]
|-
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
| [[File:disk.png |60px]]
|}
{| border=1 cellspacing=5 cellpadding=2 style=text-align: center
|-
! 12/04/12
|-
| [[File:DataStore-1-Tios-12-03-2012.png| 100px]]
| [[File:DataStore-1-readp-12-03-2012.png| 100px]]
| [[File:DataStore-1-cachep-12-03-2012.png| 100px]]
| [[File:DataStore-1-ckbsec-12-03-2012.png| 100px]]
| [[File:DataStore-1-mkbsec-12-03-2012.png| 100px]]
| [[File:DataStore-1-ciosec-12-03-2012.png| 100px]]
| [[File:DataStore-1-miosec-12-03-2012.png| 100px]]
|-}
Things seem to work now after adding this variable to 'my'
my ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR) = &mysubinput;
second piece was to add return ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR);
Now my questions is how do i get the output from sub writesections into a file, such as datastore.wk?
Upvotes: 0
Views: 373
Reputation: 126752
If you had use strict
and use warnings
enabled you would see messages like
Global symbol "$STORENAME" requires explicit package name
which are there to help you debug your program.
The problem is that the variables you have declared within mysubinput
are local to that subroutine and will be discarded when the subroutine returns. As far as writesections
is concerned these variables have never been declared, and the program won't compile.
Uncomment those use
statements, and add declarations for $DAY
, $MONTH
, $STORENAME
, $STORENUM
, and $YEAR
before the first subroutine that uses them, and remove the my
from those variables within the subroutines. Then they will be accessible throughout the rest of the file and your program should work.
By the way, calling subroutines with &mysubinput
is a very old style indeed. You should use mysubinput()
throughout.
Upvotes: 2
Reputation: 5220
Do not ever comment the use strict
line :)
It would alert you that your writesections
sub doesn't have the access to the variables declared inside the scope of mysubinput
!
I suggest you to learn about private variables first. To share your variables, you should return
them. Following your logic:
sub mysubinput
{
...
return ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR);
}
my ($STORENUM, $STORENAME, $IMGPREFIX, $MONTH, $DAY, $YEAR) = mysubinput();
writesections($STORENAME, $STORENUM, $MONTH, $DAY, $YEAR);
However, if you expect to grow your Perl script, sooner or later you'll have to learn Object-Oriented Programming. Then, Moose framework is your friend.
Upvotes: 1