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