1
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;
}

我收到原型不匹配错误。我该如何解决?

4

2 回答 2

5

问题是您已经预先声明joins了 的原型$@,然后在没有任何原型的情况下实现了它。正如其他人所指出的,您没有利用原型。您也没有利用 sub 被预先声明(能够不带括号调用)所以删除这一行:

sub joins($ @);

关于原型,Perl::Critic 认为它们是严重性 5(最差)的违规:

与普遍看法相反,子例程原型无法在编译时检查正确的参数。不要使用它们。

于 2013-10-25T08:26:44.997 回答
4

好吧,实际上,您需要做的是更改连接函数定义。您可以将“sub joins”更改为“sub joins($@) 以同意 joins 函数的声明。代码如下所示。

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)。此外,我还建议您使用严格和警告,尽管在演示代码中。

于 2013-10-25T09:08:44.350 回答