[英]Undefined subroutine error in perl package
這是主文件upload.cgi
#!/usr/bin/perl
use strict;
use lib '.';
use XFSConfig;
use XUpload ;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Fcntl ':flock';
use LWP::UserAgent;
use HTTP::Cookies;
use HTML::Form;
use Encode;
sub xmessage
{
my ($msg) = @_;
&lmsg($msg);
$msg=~s/'/\\'/g;
$msg=~s/<br>/\\n/g;
print"Content-type: text/html\n\n";
print"<HTML><HEAD><Script>alert('$msg');</Script></HEAD><BODY><b>$msg</b></BODY></HTML>";
exit;
}
sub lmsg
{
my $msg = shift;
open(F,">$c->{htdocs_tmp_dir}/$sid.html");
print F qq[new Object({"state":"error", "msg":"$msg"})];
close F;
&logit($msg);
}
這個函數調用一個函數
&XUpload::ProcessFile()
和XUpload :: ProcessFile()函數調用函數&xmessage(“ Fatal”); 在upload.cgi中定義
現在我得到這個錯誤
Undefined subroutine &XUpload::xmessage called at Modules/XUpload.pm line 17.
看來XUpload軟件包根本找不到在upload.cgi中定義的函數xmessage。
cgi腳本中的xmessage
子項在main
包中定義,而XUpload
模塊(顯然)在XUpload
名稱空間中運行。
解決此問題最終將涉及學習Perl的名稱空間和Exporter
模塊。 但是快速而又骯臟的解決方法是在XUpload
包中為您的子對象創建一個別名。 將此行添加到您的主腳本中:
*XUpload::xmessage = *message;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.