在 Perl 中使用和不使用 & 调用子程序有什么区别?

What is the difference when calling subroutine with and without & in Perl?

在我的家庭作业中,有人告诉我在 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_again

我能想到的唯一让您发现的东西就是这段代码所展示的。试一试

#!/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; 
}

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