簡體   English   中英

Perl軟件包中的未定義子例程錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM