我的第一个问题是:
这是否可以这样做,因为现在我有一个perl脚本,它读取Html文件并提取数据以显示在另一个html文件中。
如果上述问题的答案为是,我的第二个问题是:
怎么做?
很抱歉坦率地问这个,但是因为我对perl这么新,我必须承担这个任务,所以我在这里寻求一些有用的建议或建议来指导我完成这项任务。提前感谢您的帮助。
这里是代码的一部分,因为整个块很长:
$date=localtime();
($TWDAY, $TMTH, $TD1D, $TSE, $TYY) = split(/\s+/, $date);
$TSE =~ s/\://g;
$STAMP=_."$TD1D$TMTH$TYY";
@ServerInfo=();
#--------------------------------------------------------------------------- -------------------------------
# Read Directory
#----------------------------------------------------------------------------------------------------------
$myDir=getcwd;
#----------------------------------------------------------------------------------------------------------
# INITIALIZE HTML FORMAT
#----------------------------------------------------------------------------------------------------------
&HTML_FORMAT;
#----------------------------------------------------------------------------------------------------------
# REPORT
#----------------------------------------------------------------------------------------------------------
if (! -d "$myDir/report") { mkdir("$myDir/report");};
$REPORTFILE="$myDir/report/checkpack".".htm";
open OUT,">$REPORTFILE" or die "\nCannot open out file $REPORTFILE\n\n";
print OUT "$Tag_Header";
#----------------------------------------------------------------------------------------------------------
sub numSort {
if ($b < $a) { return -1; }
elsif ($a == $b) { return 0;}
elsif ($b > $a) { return 1; }
}
@ArrayDir = sort numSort @DirArray;
#while (<@ArrayDir>) {
@OutputDir=grep { -f and -T } glob "$myDir/*.htm $myDir/*.html";
#}
#----------------------------------------------------------------------------------------------------------
@ReadLine3=();
$xyxycnt=0;
foreach $InputFile (@OutputDir) { #---- MAIN
$filename=(split /\//, $InputFile) [-1]; print "-"x80 ; print "\nFilename\t:$filename\n";
open IN, "<$InputFile" or die "Cannot open Input file $InputFile\n";
@MyData=();
$DataCnt=0;
@MyLine=();
$MyLineCnt=0;
while (<IN>) {
$LINE=$_;
chomp($LINE);
$LINE=~s/\<br\>/XYXY/ig;
$LINE=~s/\<\/td\>/ \nXYZXYZ\n/ig;
$LINE=~s/\<dirname\>/xxxdirnameyyy/ig;
$LINE=linetrim3($LINE);
$LINE=linetrim($LINE);
$LINE=~s/XYXY/\<br\>/ig;
$LINE=~s/xxxdirnameyyy/< dirname >/ig;
$LINE=~s/^\s+//ig;
print OUT2 "$LINE\n";
if (defined($LINE)) { $MyData[$DataCnt]="$LINE"; $DataCnt++ ; }
}
close IN;
foreach $ReadFile (@MyData) { #--- Mydata
$MyLineCnt++;
$MyLine[$MyLineCnt]="";
#### FILENAME
$ServerInfo[0]="$filename";
#### IP ADDRESS
if ($ReadFile =~ /Host\/Device Name\:/) {
#print "$ReadFile\n"
($Hostname)=(split /\:|\s+/, $ReadFile)[3]; print "$Hostname\n";
&myServerInfo("$Hostname","1");
}
if ($ReadFile =~ /IP Address\(es\)/) {@ListIP=(); $SwIP=1; $CntIP=0 ; };
#### OPERATING SYSTEM & VERSION
if ($ReadFile =~ /Operating System\:/) {
$SwIP=0;
$OS= (split /\:|\s+/, $ReadFile)[3]; &myServerInfo("$OS","3") ; print "$OS\n";
$OSVer= (split /\:|\s+/, $ReadFile)[-2]; &myServerInfo("$OSVer","4") ; print "$OSVer\n";
};
#### GET IP VALUE
if ($SwIP==1) {
$ReadFile=(split /\:/,$ReadFile) [2];
$ReadFile=~s/[a-z|A-Z]|\(|\)|\// /ig; print "$ReadFile\n";
if ($CntIP==0) {
#$ListIP[$CntIP]=(split /\s+/,$ReadFile) [1];
@ListIP="$ReadFile";
} elsif ($CntIP==1) { print "\n\t\t $ReadFile\n" ; $ListIP[$CntIP]="\n$ReadFile";
} else { print "\t\t $ReadFile\n" ; $ListIP[$CntIP]="\n$ReadFile"; };
$CntIP++;
}
答案 0 :(得分:0)
我担心如果你不理解这个程序中发生了什么,你也根本不理解如何处理这样的任务,Stack Overflow可能不是获得帮助的正确位置。< / p>
让我试着向您展示我将采取的方法。我假设有更多的代码。
同时添加use strict
和use warnings
,同时重构以更轻松地捕获错误。如果东西因此而中断,请在继续之前使其工作。那些pragmas告诉你什么是错的。您将遇到的最常见的是全局符号“$ foo”需要显式包名称。这意味着您需要将my
放在第一个赋值之前,或者在之前声明变量。
如果您有特定的问题,请将其作为一个新问题,并举一个简短示例。阅读how to ask以确保您能获得有关这些内容的帮助。
祝你好运!在看到your comment之后我想你想要一个不同的输入和一个不同的输出。在这种情况下,忽略这一点,抛弃旧代码并从头开始。如果您对Perl知之甚少,那么如果您已经了解编程,请获取像Curtis Poe的 Beginning Perl 这样的书。如果没有,请查看Randal L. Schwartz的 Learning Perl 。