3

假设我们有以下代码:

#!usr/bin/perl

use strict ;
use warnings ;



sub print_ele_arr{

my @arr = <STDIN> ;
#print the elements of the array here . 
#do something else ..
    }
print_ele_arr() ;

但我只想将用户输入中的 3 个元素存储到我的 @arr 数组中,如何做到这一点,通常如何限制给定数组的大小?

4

3 回答 3

6

要仅存储 3 行,您可以使用

my $i = 1;
while (defined( my $line = <STDIN>) and $i++ <=3) {
    push @arr, $line;
}

至于第二个问题,限制数组的大小是什么意思?您可以使用数组切片来获取数组的前三个元素:

my @first_three = @arr[0 .. 2];
于 2013-06-02T12:53:58.603 回答
1
#!usr/bin/perl

use strict ;
use warnings ;

sub print_ele_arr {

  my @arr;
  while (@arr < 3) {
    push @arr, scalar <STDIN>;
  }

  # chomp(@arr); # remove newlines from @arr elements?
  print "@arr\n";
}

print_ele_arr() ;

STDIN或任何其他输入文件句柄读取时,有两种方法,在标量或列表上下文中进行。

列表上下文强制一次读取所有行,标量一次读取一行。由于STDIN没有固定大小,最好使用scalar函数强制标量上下文。

这在填充数组时是必要的,在填充普通标量时是多余的,即。

my $single_line = <STDIN>;

和写作一样

my $single_line = scalar <STDIN>;

于 2013-06-02T12:58:29.917 回答
1

我的意思是阻止用户输入超过 3 个元素?

不,计算机无法控制人或物理锁定键盘。他们可以随心所欲地打字。在您阅读第一行之前,他们甚至可能已经输入了超过三行。

你有两个选择:

  1. 只读前三行。

    my @lines;
    while (<>) {
       push @lines, $_;
       last if @lines == 3;
    }
    
    die "Bad input" if @lines < 3;
    
  2. 如果他在发送 EOF 之前输入的行数超过三行,则会引发错误。

    my @lines;
    while (<>) {
       die "Bad input" if @lines > 3;
       push @lines, $_;
    }
    
    die "Bad input" if @lines < 3;
    
于 2013-06-02T17:00:41.177 回答