sub joins($ @);
print "\nEnter a letter \n\n";
$l = <STDIN>;
chomp $l;
print "\n Enter Five String \n\n";
@arr;
for($i=0;$i<5;$i++) {
$arr[$i] = <STDIN>;
chomp $arr[$i];
}
@ar = joins($l, @arr);
print "\nCombined Stirng is :- @ar\n";
sub joins {
($x, @str)=@_;
@j = ($x, @str);
return @j;
}
我遇到原型不匹配错误。我该如何解决?
答案 0 :(得分:5)
问题是您已使用joins
的原型预先声明了$@
,然后在没有任何原型的情况下实现了它。正如其他人所说,你没有利用原型。你也没有利用sub preclared(没有括号调用的能力)所以删除这一行:
sub joins($ @);
关于原型的主题,Perl :: Critic认为它们是严重性为5(最差)的违规行为:
答案 1 :(得分:4)
嗯,实际上,您需要做的是更改连接函数定义。 您可以将“子连接”更改为“子连接($ @)以同意连接函数的声明。代码如下所示。
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 sub joins($@);
6
7 print "\nEnter a letter \n\n";
8 my $l=<STDIN>;
9 chomp $l;
10 print "\n Enter Five String \n\n";
11 our @arr;
12
13 for(my $i=0;$i<5;$i++)
14 {
15 $arr[$i]=<STDIN>;
16 chomp $arr[$i];
17 }
18
19 my @ar=joins($l,@arr);
20 print "\nCombined Stirng is :- @ar\n";
21
22 sub joins($@)
23 {
24 my ($x, @str)=@_;
25 my @j=($x,@str);
26 return @j;
27 }
顺便说一下,你可以在这里阅读关于原型(http://perldoc.perl.org/perlsub.html#Prototypes)的文档。此外,我还建议您使用严格和警告,但在演示代码中。