hhl*_*hhl -3 perl subroutine malformed
我尝试在Perl中调用子例程,但是我得到了这个错误"Malformed prototype for main".我有一个子程序比较,我必须传递给它两个整数.
#!/usr/bin/perl
@ListA=(1,2,3);
@ListB=(2,3,4);
@ListResult;
#AND
sub Compare($p1,$p2){
if($p1 > sizeof(ListA) or $p2 > sizeof(ListB))
{
return;}
if(ListA($p1) = ListB($p2)){
push (@ListResult, ListA($p1));
Compare($p1+1,$p2+1);
return;
}
if(ListA($p1) > ListB($p2)){
Compare($p1,$p2+1);
return;
}
else {
Compare($p1+1,$p2);
return;
}
return;
}
Compare(1,1);
Run Code Online (Sandbox Code Playgroud)
请帮助我并解释如何更正此程序.
这是错的:
sub Compare($p1,$p2){
Run Code Online (Sandbox Code Playgroud)
Perl没有这样做.这将是您报告的错误的来源.(从技术上讲,它是原型,这是一个你不应该使用的perl功能,因为它不会做你想象的那样).
你可能想要:
sub Compare{
my ( $p1, $p2 ) = @_;
#etc.
Run Code Online (Sandbox Code Playgroud)
另外:打开use strict;并打开use warnings;.起初他们很讨厌,但是在编程陷阱时他们确实做了很多好事.
喜欢:
sizeof(ListA)
Run Code Online (Sandbox Code Playgroud)
无效,因为ListA是一个赤字.或者是一个字符串.但它不是你的大小@ListA.这比你想象的要简单 - 标量上下文中的列表返回它的长度.所以你可以简单地做$p1 > @ListA,它会工作.
和:
if(ListA($p1) = ListB($p2)){
Run Code Online (Sandbox Code Playgroud)
方法是:
@ListA).()何时应该使用[].(访问数组索引是$arrayname[0])=哪个是一个分配,而不是==(或eq用于字符串)作为比较.