arrays - 为什么我的 Perl 循环最后关闭了 1?

标签 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";

最佳答案

问题出在这里:

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/

相关文章:

java - 显示结果的一维数组问题

Javascript/Node.js 数组内存管理

perl - 不能持续到循环 block 之外

fortran - 将 Fortran 90 编写的子例程与 Abaqus Standard 一起使用

c# - 在自定义对象的 List<> 上使用 ToArray()

javascript - 在 for 循环中修改对象(异步/等待)

perl - PayPal Express 客户结账交易 ID

html - 参数值在第一个空格处被截断(URL 的其余部分消失)

arrays - 将大值传递给模块

perl - 如何从目录树在 Perl 中构建层次哈希