加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从Perl中的用户获取数组输入

发布时间:2020-12-15 22:06:25 所属栏目:大数据 来源:网络整理
导读:当我使用此代码时 print "nEnter !0 numbers nn";@arr=STDIN;chomp @arr; 它继续从用户输入,直到我使用ctrl z,然后按Enter键.我想限制用户输入到列表的数量. 为此,我试过了 print "nEnter !0 numbers nn";for($i=0;$i10;$i++){@arr[$i]=STDIN;chomp @a
当我使用此代码时
print "nEnter !0 numbers nn";
@arr=<STDIN>;
chomp @arr;

它继续从用户输入,直到我使用ctrl z,然后按Enter键.我想限制用户输入到列表的数量.
为此,我试过了

print "nEnter !0 numbers nn";
for($i=0;$i<10;$i++)
{
@arr[$i]=<STDIN>;
chomp @arr;
}

但这种老化陷入无限循环,我必须使用ctrl c

我如何限制我的循环,以便只输入10个输入用户

解决方法

这里的基本问题是当你使用$arr [$i]时,你正在使用@arr [$i].使用数组sigil @,可以在文件句柄上强制执行列表上下文,这样可以读取尽可能多的值.在标量上下文中,它只读取一个值,然后转到下一个迭代.换句话说,它应该是这样的:
$arr[$i] = <STDIN>;

但是,关于您的代码,可以说更多.例如,在分配数字时使用特定索引是非常必要的,您可以简单地使用push

for (1 .. 10) {
    my $num = <STDIN>;
    chomp $num;
    push @arr,$num;
}

小心确保保持标量上下文.从技术上讲,您可以按@arr,< STDIN>,但这会将文件句柄再次放入列表上下文中.这种方式也很好听.

另一种在不使用“外部”计数器的情况下执行相同操作的方法是将数组本身用作循环条件.在标量上下文中,数组返回其大小.我们可以像这样使用它:

while (@arr < 10) {
    my $num = <STDIN>;
    chomp $num;
    push @arr,$num;
}

现在,如果你为你的计数设置一个变量……

my @arr;
my $count = 10;
print "Enter $count numbers: ";
while (@arr < $count) {

…你的程序现在可以扩展.

大多数情况下,不需要或不需要使用STDIN.例如,您可能希望程序也使用文件名作为输入.使用“钻石运算符”<>允许Perl自己决定是否从< ARGV>读取或< STDIN>.所以,你可以改为使用:

my $num = <>;

你应该经常使用

use strict;
use warnings;

这两个pragma有一个很短的学习曲线,但没有它们的编码是困难和危险的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读