将输入中的字母拆分为perl中的数组

Spliting letters from an input into an array in perl

我正在做一个项目,我需要从用户那里获取输入,然后将其切割成单独的字符供以后使用(将它们向上移动一个字符),但我无法获得输入一个数组并将其打印出来以检查它是否在那里。目前我的代码是

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $count=0;      # this block just creates variables
my $userinput;

print "Input?";      
$userinput=<STDIN>;   # this block just gets input and creates the array
my @userarray=();

while(<@userarray>) {
@userarray = split('', $userinput);   #this block should loop as many times as there are characters in the input while separating the characters
}

print Dumper(@userarray);   #this should print the array

如果他们的输入是 "house"

,我的输出应该看起来像这样
@userarray[0]= "h"
@userarray[1]= "o"
@userarray[2]= "u"
@userarray[3]= "s"
@userarray[4]= "e"

但是当我在其中输入某些内容时,尽管有严格的警告并且没有返回任何内容,但它只是打印回一个空白屏幕。我哪里错了?

这是一个常见的 Perl 模式。您想要循环以便用户可以输入更多数据。尝试这样的事情:

print "Input?";
while (my $userinput = <STDIN>) {
  chomp $userinput; # remove trailing newline
  my @userarray = split //, $userinput; 
  print Dumper(\@userarray);
}

<D> 从文件句柄 D 读取并 returns 一条(下一条)记录(如果记录分隔符 $/ 未更改,则为一行) ] 在标量上下文中。在列表上下文中,返回所有剩余记录(作为数组)。

说的是,这一段是问题所在:

$userinput=<STDIN>;   # this block just gets input and creates the array
my @userarray=();

while(<@userarray>) {
@userarray = split('', $userinput);   #this block should loop as many times as there are characters in the input while separating the characters
}

<@userarray> returns 没什么,因为 @userarray 肯定不是有效的文件句柄。因此永远不会进入该循环。

如果您希望用户只输入一行,则根本不要使用循环。阅读一行并将其拆分。

$userinput=<STDIN>;   # this block just gets input and creates the array
chomp($userinput);
my @userarray=();

@userarray = split('', $userinput);

但是该循环可能表明您希望用户能够输入多行。如果是这样,循环直到没有剩余输入(EOF),逐行读取输入。拆分行并将结果推入数组。

while(my $line = <STDIN>) {
  chomp($line);
  push(@userarray, split('', $line));
  print(join(',', @userarray) . "\n");
}

对于这两种方式:chomp() 删除记录(行)末尾的尾随记录分隔符(新行)。如果您想保留这些,请不要使用它。我以为你不知道。