use*_*167 5 arrays perl subroutine
我有这个程序不能按预期工作.帮我.
我想打印一行标题.
如果是输入4,我想1|2|3|4输出.
它并不是全部工作,如果我硬编码$count它部分工作但最后一个数字丢失.
sub printC {
my $count = @_;
# count = 4 # works partially only prints 1|2|3
for(my $i=1;$i<$count;$i++) {
print "$i|";
}
print $i;
}
$count = 2;
&printC($count);
print "\n";
Run Code Online (Sandbox Code Playgroud)
cod*_*ict 11
问题出在这里:
my $count = @_;
Run Code Online (Sandbox Code Playgroud)
分配是发生在一个标量,其在指定数组元素的数量方面@_来$count,你的情况是1,当你正在传递1参数的功能.
要解决此问题,您可以:
my ($count) = @_;
Run Code Online (Sandbox Code Playgroud)
要么
my $count = $_[0];
Run Code Online (Sandbox Code Playgroud)
这是另一个问题:
for(my $i=1.....
^^
Run Code Online (Sandbox Code Playgroud)
通过使用my你已经在身体的$i 本地for,它将不会在它外面.所以你最后的print外面for不打印任何东西.要解决此问题,请$i在循环外部声明:
sub printC {
my ($count) = @_;
my $i;
....
Run Code Online (Sandbox Code Playgroud)
总是要写点
use strict;
Run Code Online (Sandbox Code Playgroud)
在您的程序的顶部,使您能够捕获此类错误.
执行函数功能的perl方法是:
print join('|',1..$count);
Run Code Online (Sandbox Code Playgroud)
一个真正的Perl黑客可能会写这样的东西:
sub printC {
my $count = shift;
print join "|", (1 .. $count);
}
Run Code Online (Sandbox Code Playgroud)
一旦你理解了它是如何工作的,你会发现你已经学到了更多关于Perl的知识.:-)