Linux Perl帮助:Can';t调用方法";“显示”;关于未定义的值
让我们从基本背景开始。我们最近把我们的网络托管带到了家里。 很少有老网站仍然使用Perl。我没有Perl方面的经验。 开始吧。我们在我们的主域名上有一个子网站 公共链接: 当您转到网站时,我们会收到以下错误消息Linux Perl帮助:Can';t调用方法";“显示”;关于未定义的值,linux,perl,cgi,Linux,Perl,Cgi,让我们从基本背景开始。我们最近把我们的网络托管带到了家里。 很少有老网站仍然使用Perl。我没有Perl方面的经验。 开始吧。我们在我们的主域名上有一个子网站 公共链接: 当您转到网站时,我们会收到以下错误消息 "Software error: Can't call method "display" on an undefined value at /var/www/www.gatewayrehab.org/app/webroot/eap/index.cgi line 47." 查看EAP
"Software error:
Can't call method "display" on an undefined value at /var/www/www.gatewayrehab.org/app/webroot/eap/index.cgi line 47."
查看EAP网站/目录,所有文件都具有适当的权限,我同样没有使用Perl/Cgi的经验。下面是index.cgi文件:
#!/usr/bin/perl -w
### the main control file used in the system
BEGIN { unshift @INC, qw(./cgi-bin/include/); }
### send all fatal errors to the browser
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
use Error_Handler;
use File_Handler;
use Cookie_Handler;
require "./cgi-bin/setup.cgi";
do "./cgi-bin/include/common.cgi";
### initialize the file handling module
my $File = new File_Handler;
### initialize the cookie handling module
my $Cookie = new Cookie_Handler;
###parse
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
#&error_check;
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ tr/+/ /;
$name =~ s/\breq\_//ig;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ tr/A-Z/a-z/;
$name = trim($name);
$FORM{$name} = trim($value);
}
my %cookiedata = $Cookie -> get_cookies();
### read the summary database
my $summary_ref = $File -> read($login_summary)|| $Error -> display("$!". __LINE__);
my (@summary) = @$summary_ref;
### read the companies database
my $companies_ref = $File -> read($companies_db)|| $Error -> display("$!". __LINE__);
my (@companies) = @$companies_ref;
my %COMP = ();
foreach (@companies) {
$_ =~ s/\n|\r//g;
my ($c_num, $c_name) = split(/\t/, $_);
$COMP{$c_num} = $c_name;
}
if ( $cookiedata{'LOGIN'} != 1 ) {
my $found = 0;
my $company_number = $ENV{'REMOTE_USER'};
$company_number =~ s/s|e|w//g;
foreach (@summary) {
$_ =~ s/\n|\r//g;
my @field = split(/\t/, $_);
$field[0] = &trim($field[0]);
$field[2] = &trim($field[2]);
$field[3] = &trim($field[3]);
$field[4] = &trim($field[4]);
$field[5] = &trim($field[5]);
$field[6] = &trim($field[6]);
if ( $field[0] eq "$company_number" ) {
$found = 1;
my $firstletters = substr($ENV{'REMOTE_USER'}, 0, 2);
$firstletters = trim($firstletters);
if ( $firstletters ne "sw" && $firstletters ne "lf" ) {
$firstletters = substr($firstletters, 0, 1);
}
if ( lc($firstletters) eq "e" ) {
$field[3] = ($field[3] + 1);
} elsif ( lc($firstletters) eq "s" ) {
$field[2] = ($field[2] + 1);
} elsif ( lc($firstletters) eq "w" ) {
$field[4] = ($field[4] + 1);
} elsif ( lc($firstletters) eq "sw" ) {
$field[5] = ($field[2] + 1);
} elsif ( lc($firstletters) eq "lf" ) {
$field[6] = ($field[6] + 1);
} else {
$field[3] = ($field[3] + 1);
}
$_ = join("\t", @field);
}
}
if ( $found == 1 ) {
# write data back to file
# append to summary file
open(LOG, ">$login_summary") || $Error -> display("$!". __LINE__);
flock(LOG,2);
foreach (@summary) {
print LOG $_ ."\n";
}
flock(LOG,8);
close(LOG);
#$File -> file($login_summary);
#$File -> data(\@summary);
#$File -> write() || $Error -> display("$!". __LINE__);
} else {
$e = 0;
$s = 0;
$w = 0;
$sw = 0;
$lf = 0;
my $firstletters = substr($ENV{'REMOTE_USER'}, 0, 2);
$firstletters = trim($firstletters);
if ( $firstletters ne "sw" && $firstletters ne "lf" ) {
$firstletters = substr($firstletters, 0, 1);
}
if ( lc($firstletters) eq "e" ) {
$e = 1;
} elsif ( lc($firstletters) eq "s" ) {
$s = 1;
} elsif ( lc($firstletters) eq "w" ) {
$w = 1;
} elsif ( lc($firstletters) eq "sw" ) {
#$sw = 1;
$s = 1;
} elsif ( lc($firstletters) eq "lf" ) {
$lf = 1;
} else {
$e = 1;
}
# append to summary file
open(LOG, ">>$login_summary") || $Error -> display("$!". __LINE__);
flock(LOG,2);
print LOG $company_number ."\t". $COMP{$company_number} ."\t". $s ."\t". $e ."\t". $w . "\t". $sw ."\t". $lf ."\n";
flock(LOG,8);
close(LOG);
}
my (@login_logs) = ();
my $logline = "";
$login_logs[0] = $ENV{'REMOTE_USER'};
$login_logs[1] = $ENV{'REMOTE_ADDR'};
$login_logs[2] = time();
open(LOG, ">>$login_logs") || $Error -> display("$!". __LINE__);
flock(LOG,2);
print LOG $ENV{'REMOTE_USER'} ."\t". $ENV{'REMOTE_ADDR'} ."\t". time() ."\n";
flock(LOG,8);
close(LOG);
print "Set-Cookie: LOGIN=1";
print "; path=$cookiepath; domain=$cookiedomain;\n";
}
my $firstletters = substr($ENV{'REMOTE_USER'}, 0, 2);
$firstletters = trim($firstletters);
if ( $firstletters ne "sw" && $firstletters ne "lf") {
$firstletters = substr($firstletters, 0, 1);
}
if ( lc($firstletters) eq "e" ) {
print "Location: http://www.gatewayrehab.org/eap/new/employee/member.htm\n\n";
} elsif ( lc($firstletters) eq "s" ) {
print "Location: http://www.gatewayrehab.org/eap/supervisor/\n\n";
} elsif ( lc($firstletters) eq "w" ) {
print "Location: http://www.gatewayrehab.org/eap/new/worklife/member.htm\n\n";
} elsif ( lc($firstletters) eq "sw" ) {
print "Location: http://www.gatewayrehab.org/eap/supervisor-wl/\n\n";
exit;
} elsif ( lc($firstletters) eq "lf" ) {
print "Location: http://www.gatewayrehab.org/eap/legalandfinancial/\n\n";
exit;
} else {
print "Location: http://www.gatewayrehab.org/eap/new/employee/member.htm\n\n";
}
#output html
print "Content-type: text/html\n\n";
print "<h1>hello world!</h1>";
$e = `perl -ver`;
$r = `whereis perl5`;
$z = `whereis sendmail`;#
$w = `top`;#
$d = `w`;
print "<pre>perl version:<br>$e<hr>perl path:<br>$r<hr>sendmail path:<br>$z<hr>top:<br>$w<hr>w:<br>$d<hr>environment vars:<br>";##
while (($key, $val) = each %ENV) {
print "$key = $val\n";
}
$x= 'lowercase';
print "<hr>path tranlsated(NT)<br>$ENV{'PATH_TRANSLATED'}</pre>";
#$x = uc($x);
print "<br>$x";
exit;
#/usr/bin/perl-w
###系统中使用的主控制文件
开始{unshift@INC,qw(./cgi-bin/include/);}
###将所有致命错误发送到浏览器
使用CGI::Carp qw(fatalsToBrowser);
使用CGI qw(:标准);
使用错误处理器;
使用文件处理器;
使用Cookie_处理器;
需要“/cgi-bin/setup.cgi”;
执行“/cgi-bin/include/common.cgi”;
###初始化文件处理模块
my$File=新文件\u处理程序;
###初始化cookie处理模块
my$Cookie=新的Cookie\u处理程序;
###解析
$ENV{'REQUEST_METHOD'}=~tr/a-z/a-z/;
if($ENV{'REQUEST_METHOD'}eq“POST”){
读取(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}否则{
$buffer=$ENV{'QUERY_STRING'};
}
@pairs=split(/&/,$buffer);
#&错误检查;
foreach$pair(@pairs){
($name,$value)=拆分(/=/,$pair);
$value=~tr/+/;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”,十六进制($1))/eg;
$name=~tr/+/;
$name=~s/\breq\\uig;
$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”,十六进制($1))/eg;
$name=~tr/A-Z/A-Z/;
$name=trim($name);
$FORM{$name}=trim($value);
}
我的%cookiedata=$Cookie->get_cookies();
###阅读摘要数据库
我的$summary\u ref=$File->read($login\u summary)| |$Error->display(“$!”)\uuuuuuuuuuu行);
我的(@summary)=@$summary\u ref;
###阅读公司数据库
my$companys_ref=$File->read($companys_db)| |$Error->display(“$!”)uuuuuuuuuuuu行);
我的(@companys)=@$companys\u ref;
我的%COMP=();
foreach(@公司){
$\uz=~s/\n |\r//g;
我的($c_num,$c_name)=拆分(/\t/,$);
$COMP{$c_num}=$c_name;
}
如果($cookiedata{'LOGIN'}!=1){
我的$found=0;
我的$company_number=$ENV{'REMOTE_USER'};
$company_number=~s/s | e | w//g;
foreach(@summary){
$\uz=~s/\n |\r//g;
my@field=split(/\t/,$);
$field[0]=&trim($field[0]);
$field[2]=&trim($field[2]);
$field[3]=&trim($field[3]);
$field[4]=&trim($field[4]);
$field[5]=&trim($field[5]);
$field[6]=&trim($field[6]);
如果($field[0]eq“$company\u number”){
$found=1;
我的$firstletters=substr($ENV{'REMOTE_USER'},0,2);
$firstletters=trim($firstletters);
如果($firstletters ne“sw”和&$firstletters ne“lf”){
$firstletters=substr($firstletters,0,1);
}
if(信用证($firstletters)等式“e”){
$field[3]=($field[3]+1);
}elsif(信用证($firstletters)eq“s”){
$field[2]=($field[2]+1);
}elsif(信用证($firstletters)等式“w”){
$field[4]=($field[4]+1);
}elsif(信用证($firstletters)eq“sw”){
$field[5]=($field[2]+1);
}elsif(信用证($firstletters)eq“lf”){
$field[6]=($field[6]+1);
}否则{
$field[3]=($field[3]+1);
}
$389;=连接(“\t”,@字段);
}
}
如果($found==1){
#将数据写回文件
#附加到摘要文件
打开(日志,“>$login_summary”)| |$Error->display(“$!”)\uuuuuuuuuuuuuuuuuuuu行);
羊群(原木,2);
foreach(@summary){
打印日志$。“\n”;
}
羊群(原木,8);
关闭(日志);
#$File->File($login\u summary);
#$File->data(\@summary);
#$File->write()| |$Error->display(“$!”)\uuuuuuuuuuu行;
}否则{
$e=0;
$s=0;
$w=0;
$sw=0;
$lf=0;
我的$firstletters=substr($ENV{'REMOTE_USER'},0,2);
$firstletters=trim($firstletters);
如果($firstletters ne“sw”和&$firstletters ne“lf”){
$firstletters=substr($firstletters,0,1);
}
if(信用证($firstletters)等式“e”){
$e=1;
}elsif(信用证($firstletters)eq“s”){
$s=1;
}elsif(信用证($firstletters)等式“w”){
$w=1;
}elsif(信用证($firstletters)eq“sw”){
#$sw=1;
$s=1;
}elsif(信用证($firstletters)eq“lf”){
$lf=1;
}否则{
$e=1;
}
#附加到摘要文件
打开(日志,“>>$login_summary”)| |$Error->display(“$!”)\uuuuuuuuuuuuuuuuuuu行);
羊群(原木,2);
打印日志$company\U number.'\t.$COMP{$company\U number}.\t.$s.\t.$e.\t.$w.\t.$sw.\t.$lf.\n”;
羊群(原木,8);
关闭(日志);
}
我的(@login_logs)=();
我的$logline=“”;
$login_logs[0]=$ENV{'REMOTE_USER'};
$login_logs[1]=$ENV{'REMOTE_ADDR'};
$login_logs[2]=time();
打开(日志,“>>$login_logs”)| |$Error->display(“$!”)\uuuuuuuuuuuuuuuuuuu行);
羊群(原木,2);
打印日志$ENV{'REMOTE\u USER'}.\t“$ENV{'REMOTE\u ADDR'}.\t”.time().“\n”;
羊群(原木,8);
关闭(日志);
打印“设置Cookie:LOGIN=1”;
打印“路径=$cookiepath;域=$cookiedomain;\n”;
}
我的$firstletters=substr($ENV{'REMOTE_USER'},0,2);
$firstletters=trim($firstletters);
如果($firstletters ne“sw”和&$firstletters ne“lf”){
$firstletters=substr($firstletters,0,1);
}
if(信用证($firstletters)等式“e”){
“打印”位置:http://www.gatewayrehab.org/eap/new/employee/member.htm\n\n“;
}elsif(信用证($firstletters)eq“s”){
“打印”位置:http://www.gatewayrehab.org/eap/supervisor/\n\n“;
}elsif(信用证($firstletters)等式“w”){
“打印”位置:http://www.gatewayrehab
my $Error = new Error_Handler;