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