Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:数据输入模块不工作_Perl_Perl Module - Fatal编程技术网

Perl:数据输入模块不工作

Perl:数据输入模块不工作,perl,perl-module,Perl,Perl Module,下面是我正在运行的两个文件的内容: Secure.cgi MyModule.pm MyModule.pm中的“sub-scrub{}”子例程是Secure.cgi中的一个子例程,但我想 将其作为单独的模块运行 作为Secure.cgi中的一个子例程,“sub-scrub”工作得很好,但当我将其移动到 MyModule.pm,它不起作用——毫无疑问,因为我没有正确地调用它,而且 模块中可能有错误 这是我第一次尝试创建模块。在中测试时,“打印”功能工作正常 MyModule.pm,因此我知道它已正确

下面是我正在运行的两个文件的内容:
Secure.cgi MyModule.pm

MyModule.pm中的“sub-scrub{}”子例程是Secure.cgi中的一个子例程,但我想 将其作为单独的模块运行

作为Secure.cgi中的一个子例程,“sub-scrub”工作得很好,但当我将其移动到 MyModule.pm,它不起作用——毫无疑问,因为我没有正确地调用它,而且 模块中可能有错误

这是我第一次尝试创建模块。在中测试时,“打印”功能工作正常 MyModule.pm,因此我知道它已正确安装

任何良好的反馈都将不胜感激

SECURE.CGI
#!/usr/bin/perl

use MyModule;

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

### DATA VALIDATION IN MYMODULE.PM IS NOT OCCURRING#######  
$value = MyModule->scrub;
##########################################################

##### THIS WORKED WHEN "SCRUB" WAS EMBEDDED IN THIS SCRIPT #######  
##&scrub;

$userdata{$name} = $value;
}

$id1=$userdata{id1};
$id2=$userdata{id2};

print "Content-type:text/html\r\n\r\n";
print" 
<BR>
<Table align=center width=1000 border=1 cellpadding=4 cellspacing=0>
<TR><TD align=center>
<form action=\"http://###myserver###\" method=post>
<table border=1 bgcolor=#EAEAEA>
<TR><TD align=center colspan=3><B>Input Form</b></td></tr>
<TR><TD align=center><b>ID1</b><BR><input type=text name=id1></td></tr>
<TD align=center><b>ID2</b><BR><input type=text name=id2></td></tr>
<TD align=center><input type=submit value=submit name=submit></td></tr>
</table>
</form>
<BR>
<table border=1 bgcolor=#EAEAEA >
<TR><TD align=center><B>Form Output</b></td></tr>
<TR><TD align=center><b>ID1</b></td></tr>
<TR><TD bgcolor=white align=center>&nbsp;  $id1</td></tr>
<TR><TD align=center><b>ID2</b></td></tr>
<TR><TD bgcolor=white align=center>&nbsp;  $id2</td></tr>
</table>

</TD></TR></table>
<BR>
</body>  </html>"; 
=======================================

MYMODULE.PM
package MyModule;

sub scrub {
$value =~ s/.html|.htm|.cgi|.php//g;    
$value =~ s/\///g;
$value =~ s/&|$|@|'|"|<|>|\^|\(|\)|=//g;
$value =~ s/onmouseup|onreset|onselect|onsubmit|onunload//g;    
return $value;
}
1;
SECURE.CGI
#!/usr/bin/perl
使用MyModule;
读取(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@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;
###MYMODULE.PM中的数据验证未发生
$value=MyModule->scrub;
##########################################################
#####当“擦洗”嵌入到这个脚本中时,它就起作用了
##&灌木丛;
$userdata{$name}=$value;
}
$id1=$userdata{id1};
$id2=$userdata{id2};
打印“内容类型:text/html\r\n\r\n”;
“打印”

输入表格 ID1
ID2

表单输出 ID1 id1美元 ID2 id2美元
"; ======================================= MYMODULE.PM 包MyModule; 亚灌木{ $value=~s/.html |.htm |.cgi |.php//g; $value=~s/\///g; $value=~s/&&$$$@'\\^^\\(\\)\=/g; $value=~s/onmouseup | onreset | onselect | onsubmit | onunload//g; 返回$value; } 1.
代码有太多错误,我不知道从哪里开始。我将把关于风格和技术的警告留给花生画廊


问题是,子例程使用外部作用域中的变量,但当子例程移动到另一个包中时,该变量就消失了。请更改子例程,使其改为使用参数。

代码有太多错误,我不知道从何处开始。我将把有关样式和技术的警告留给Peant gallery


问题是,子例程使用外部作用域中的变量,但当子例程移动到另一个包中时,该变量就消失了。请更改子例程,使其改为使用参数。

您好,1993年的时间旅行者!Welp。始终
使用严格;使用警告;
使用CGI;不要使用自己的解码。Read a Perl教程(关键词:词法变量、heredocs、子程序参数)。我可以想出几种有趣的方法来打破这个功能。我也可以。你看到的并不是全部;还有更多的代码可以过滤错误的输入;我认为没有理由发布所有的代码。你好,1993年的时间旅行者!好。总是
使用严格;使用警告;
使用CGI
;不要滚动你自己的装饰阅读Perl教程(关键词:词法变量、herdocs、子程序参数)。我可以想出几种有趣的方法来破坏
scrub
功能。我也可以。你看到的并不是全部;还有更多的代码可以过滤错误的输入;我认为没有理由发布所有内容。不幸的是,此代码所属的实体需要它,原因我在此不赘述。我个人的偏好是使用“使用“CGI”并保持验证正则表达式在子例程中的状态,但这不是我的选择。您有这个参数的简单示例吗?
sub-scrub{my($value)=@;
………
$value=MyModule->scrub($value);
非常感谢。这是一个简单的修复方法:sub-scrub{$value=$\u1];等等。不幸的是,此代码所属的实体要求它保持原样,原因我在此不赘述。我个人的偏好是使用“use CGI”,并将验证正则表达式保留在子例程中,但这不是我的选择。您有此参数的简单示例吗?
sub scrub{My($value)=@;
………
$value=MyModule->scrub($value);
非常感谢。这是一个简单的修复方法:sub-scrub{$value=$[1];等等。