2012-12-05 46 views
0

我有這個perl腳本很好地工作輸出在控制檯中呈現。但是,我的想法是重定向到一個文件....到目前爲止,我能夠完成一半的任務。我可以打印文件除了兩個子例程,它們被稱爲「子寫入」如何在子例程中打印一個被調用的子例程

有什麼想法嗎?

#!/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; 
#my $STORENUM; 
#my $STORENAME; 
#my $IMGPREFIX; 
#my $MONTH; 
#my $DAY; 
#my $YEAR; 
my $outfile = 'datastore.txt'; 
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 
{ 
    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 
{ 
    open (FILE, ">> $outfile") || die "problem opening $outfile\n"; 
    print FILE "Go back to [[MD3000i-Perf]] \n"; 
    print FILE "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center \n"; 
    print FILE "|-\n"; 
    print FILE "! [[DataStore-1]]\n"; 
    print FILE "! [[DataStore-2]]\n"; 
    print FILE "! [[DataStore-3]]\n"; 
    print FILE "! [[DataStore-4]]\n"; 
    print FILE "! [[DataStore-5]]\n"; 
    print FILE "! [[DataStore-6]]\n"; 
    print FILE "! [[DataStore-7]]\n"; 
    print FILE "! [[DataStore-8]]\n"; 
    print FILE "! [[DataStore-9]]\n"; 
    print FILE "|-\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "| [[File:disk.png |60px]]\n"; 
    print FILE "|}\n"; 
    print FILE "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center\n"; 
    print FILE "|-\n"; 
    print FILE writedate(); 
    print FILE "|-\n"; 
    print FILE writesections(); 
    print FILE "|-}\n"; 
    close(FILE); 
} 

#open (FILE, "> $myfile") || die "Couldn't open $myfile: $!\n"; 
#print FILE writepage(); 
#close (FILE); 

writepage(); 
+0

這樣的代碼讓我傷心。 'writepage'大部分歸結爲'print FILE map!'[[DataStore - $ _]] \ n「,1..9;'和'print FILE」| [[File:disk.png | 60px]] \ n「x 9;'。 'mysubinput'可以從'prompt'方法中獲益,並帶有'sub prompt(@){print @_,「\ n」; chomp(my $ ans = ); $ ans}',然後'$ STORENUM = prompt「輸入數據存儲的編號:」;' – amon

+0

嘿,我不是一個程序員,也不知道perl這是我第一次學習,但感謝您的輸入1 – user1814718

回答

-1

您應該使用詞法文件句柄。這將使這個任務變得微不足道。它也是一般處理文件句柄的首選方式。這裏有一個例子:

sub mysub { 
    open my $fh, '>>', $outfile or die "Problem opening $outfile\n"; 
    print $fh "Some string\n"; 
    anotherSub($fh); 
    close $fh; 
} 

sub anotherSub { 
    my $fh = shift; 
    print $fh "A second string\n"; 
} 
+0

謝謝做到了! – user1814718

+1

爲什麼downvote? – mpe

0

使用select

或者從函數中返回一個字符串而不是打印?

0

我剛剛更換文件詞法文件句柄:

sub writedate 
{ 
    my $fh = shift; 
    print $fh "! $DATECMD\n"; 
}  

sub writesections 
{ 
    my $fh = shift; 
    print $fh "| [[File:$STORENAME-$STORENUM-$TIOS-$MONTH-$DAY-$YEAR.png| 100px]]\n"; 
    print $fh "| [[File:$STORENAME-$STORENUM-$READp-$MONTH-$DAY-$YEAR.png| 100px]]\n"; 
    [....] 
} 



    sub writepage 
{ 
# open (FILE, ">> $outfile") || die "problem opening $outfile\n"; 
    open my $fh, '>', $outfile or die "Problem opening $outfile\n"; 
    print $fh "Go back to [[MD3000i-Perf]] \n"; 
    print $fh "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center \n"; 
    print $fh "|-\n"; 
    [....] 
    [....] 
    print $fh "|}\n"; 
    print $fh "{| border=1 cellspacing=5 cellpadding=2 style=text-align: center\n"; 
    print $fh "|-\n"; 
    writedate($fh); 
    print $fh "|-\n"; 
    writesections($fh); 
    print $fh "|-}\n"; 
# close(FILE); 
    close $fh; 
} 
相關問題