限制数组的大小?

时间:2013-06-02 12:51:28

标签: perl perl-data-structures

假设我们有以下代码:

#!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数组中,如何做到这一点,一般如何限制给定数组的大小?

3 个答案:

答案 0 :(得分:6)

要存储3行,您可以使用

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

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

my @first_three = @arr[0 .. 2];

答案 1 :(得分: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>;

答案 2 :(得分: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;