我的这个程序没有按预期工作。帮助我。
我想打印行标题。
如果输入是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";
最佳答案
问题出在这里:
my $count = @_;
分配发生在标量上下文中,它将数组@_
中的元素数量分配给$count
,您的情况是1
,因为您将 1
参数传递给函数。
要解决此问题,您可以执行以下操作:
my ($count) = @_;
或
my $count = $_[0];
还有一个问题:
for(my $i=1.....
^^
通过使用my
,您已将$i
本地添加到for
的主体中,并且它将在其外部不可用。因此,您在 for
之外的最终 print
不会打印任何内容。要解决此问题,请将 $i
声明移到循环之外:
sub printC {
my ($count) = @_;
my $i;
....
始终把写作作为重点
use strict;
位于程序的顶部,使您能够捕获此类错误。
执行函数功能的 perl 方式是:
print join('|',1..$count);
关于arrays - 为什么我的 Perl 循环最后关闭了 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005024/