关于sub的疑问

关于sub的疑问

有以下sub定义:

sub sub1($\@$){
        my($var1, $var2, $var3) = @_;
       
        print "var1: ". $var1. "\n";
        print "var2: ". $var2. "\n";
        print "var3: ". $var3. "\n"; # 如果取返回值,会得到1:print成功
       
}

我在定义之后调用,总报错:
# error message: Type of arg 2 to main::sub1 must be array (not private variable)
my $array = [1, 2, 3];
sub1('a', $array,'b');

# error message: Type of arg 2 to main::sub1 must be array (not reference constructor)
my @arrya = (1, 2, 3);
sub1('a', \@arrya, 'b');

总不能用这样去调吧:
sub1('a', (1, 2, 3), 'b');
# 地球人都知道这种调法还不如去死...

谁知道在指定了参数为数组引用的时候怎么调用啊?
sub1( 'a', @array, 'b' );
sub t {
        my $t1 = shift;
        my $t2 = shift;
        my $t3 = shift;
       
        print "$t1 $t2 $t3";
}

my $t1 = [1, 3, 4];
my $t2 = 'a';
my $t3 = '100';

t($t1, $t2, $t3);

这样没问题,估计你函数定义时出错了 不用 ($\@$) 这样的,自己查书吧
你定义sub的时候使用了prototype
sub (\@)
这样定义以后传经去的参数一定要是一个以@打头的list(但其实sub里面得到的只是一个引用)
你需要在sub里面自己deference

见下面的例子

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
sub proto ( \@ ) {
print "@{+shift}","\n";
}

my @att = qw ( one two three );
proto (@att);



QUOTE:
原帖由 churchmice 于 2008-6-4 12:53 发表
你定义sub的时候使用了prototype
sub (\@)
这样定义以后传经去的参数一定要是一个以@打头的list(但其实sub里面得到的只是一个引用)
你需要在sub里面自己deference

见下面的例子

#!/usr/bin/perl
use ...

嗯,明白了,谢谢大家!!