假设我们有以下代码:
#!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数组中,如何做到这一点,一般如何限制给定数组的大小?
答案 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个以上的元素?
没有。计算机无法控制人或物理锁定键盘。他们可以打字他们想要的一切。他们甚至可以在您阅读第一行之前输入三行以上。
您有两种选择:
只读前三行。
my @lines;
while (<>) {
push @lines, $_;
last if @lines == 3;
}
die "Bad input" if @lines < 3;
如果在发送EOF之前键入三行以上,则会抛出错误。
my @lines;
while (<>) {
die "Bad input" if @lines > 3;
push @lines, $_;
}
die "Bad input" if @lines < 3;