假设我们有以下代码:
#!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 数组中,如何做到这一点,通常如何限制给定数组的大小?
假设我们有以下代码:
#!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 行,您可以使用
my $i = 1;
while (defined( my $line = <STDIN>) and $i++ <=3) {
push @arr, $line;
}
至于第二个问题,限制数组的大小是什么意思?您可以使用数组切片来获取数组的前三个元素:
my @first_three = @arr[0 .. 2];
#!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>;
我的意思是阻止用户输入超过 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;