调用带有和不带&;的子例程时有什么区别;用Perl?

调用带有和不带&;的子例程时有什么区别;用Perl?,perl,subroutine,Perl,Subroutine,在我的家庭作业中,有人告诉我在Perl中生成一个子程序,当用其中的参数调用时,它会打印参数。我这样做了,作业的第二部分是在第二个子例程中调用第一个子例程。所以我做了所有这些,但问题是:在调用第一个子程序时,尝试运行第二个带“&”的子程序,不带“&”,并写出这两个不同调用的区别。所以子例程似乎在这两种情况下都能很好地工作,有和没有,但我不知道它到底发生了什么变化,所以我不知道该写什么。 离题,我的代码看起来好吗?这是第一次用Perl编写代码 代码如下: #!/usr/bin/perl use 5

在我的家庭作业中,有人告诉我在Perl中生成一个子程序,当用其中的参数调用时,它会打印参数。我这样做了,作业的第二部分是在第二个子例程中调用第一个子例程。所以我做了所有这些,但问题是:在调用第一个子程序时,尝试运行第二个带“&”的子程序,不带“&”,并写出这两个不同调用的区别。所以子例程似乎在这两种情况下都能很好地工作,有和没有,但我不知道它到底发生了什么变化,所以我不知道该写什么。 离题,我的代码看起来好吗?这是第一次用Perl编写代码

代码如下:

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

show_args('fred','barney','betty');

show_args_again();

sub show_args{
    my ($broj1, $broj2, $broj3) = @_;
    print "The arguments are: " . "$broj1, " . "$broj2, " . "$broj3.\n";
}
sub show_args_again{
    &show_args('fred','barney','betty');
}

作业是否说明是否应使用参数调用
show_args_

我所能想到的唯一一件你应该发现的事情就是这段代码。试试看

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

show_args('fred', 'barney', 'betty');
print "---\n";
show_args_again('fred', 'barney', 'betty');

sub show_args{
    my ($broj1, $broj2, $broj3) = @_;
    no warnings 'uninitialized';
    print "The arguments are: $broj1, $broj2, $broj3.\n";
}

sub show_args_again {
    show_args(@_);
    &show_args(@_);
    show_args();
    &show_args();
    show_args;
    &show_args;
}

我想我找到了应该做的方法,最终意识到他们希望我通过这份作业表现出什么。这是我的代码:

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;


show_args("fred","barney","betty",);

show_args_again("fred","barney","betty");

sub show_args{ 
    print "The arguments are: ", join(', ', @_), ".\n"; 
}

sub show_args_again{
     &show_args; 
}

因此,当我不放“&”符号时,它不会显示参数,正如我以前在某个地方看到的,当使用“&”而不带尾随括号时,您会忽略原型,并使用参数列表的当前值。因此,我认为,不使用符号来称呼它只是整个事情的反作用。是的,第二个子例程应该和第一个子例程做同样的事情,他们并没有说它是否应该有参数,只是说它必须调用它

欢迎来到堆栈溢出!这是一个公平的问题。关于你的代码,它看起来相当不错。您有
严格
警告
。名字很清楚。我怀疑,
$broj1
指的是您的母语tounge中的参数。你应该决定你是否想继续学英语,并坚持这个决定。
print
行最好写为
print“foo:”,join(“,”,$broj1,$broj2,$broj3),“\n”。请注意,
say
不在Perl 5.10中。代码看起来不错,但我建议每次坚持一件事@simbabque:
say
是在Perl v5中引入的。10@Borodin:找不到。但它是存在的。奇怪。我的立场是正确的@simbabque:在Nah中,只对第一个子例程说了,并且被告知第二个子例程应该只调用第一个子例程,但是感谢我目前正在尝试的代码now@AsapCancel:您的
show_args
没有(也不应该)原型,因此,使用“与”符号调用的唯一区别是,在调用它时完全没有参数,如
&show\u args。也许关键是没有任何区别。无论哪种方式,都不应该在现代生产代码中调用子例程,除非您需要它提供的深奥特性。即使这样,您也可能希望
goto&show_args