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;
}

2 つ目の質問ですが、配列のサイズを制限するとはどういう意味ですか? 配列スライスを使用して、配列の最初の 3 つの要素だけを取得できます。

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またはその他の入力ファイルハンドルから読み取る場合、スカラーコンテキストまたはリストコンテキストで行う2つの方法があります。

リストコンテキストはすべての行を一度に読み取ることを強制し、スカラーは一度に 1 行ずつ読み取ります。STDINのサイズは固定されていないため、関数を使用してスカラー コンテキストを強制することをお勧めしますscalar

これは、配列を作成するときに必要であり、単純なスカラーを作成するときに冗長です。

my $single_line = <STDIN>;

書くことと同じこと

my $single_line = scalar <STDIN>;

于 2013-06-02T12:58:29.917 に答える
1

ユーザーが 3 つ以上の要素を入力できないようにするようなことですか?

いいえ。コンピューターが人を制御したり、キーボードを物理的にロックしたりする方法はありません。好きなだけ入力できます。最初の行を読む前に、3 行以上入力した可能性もあります。

次の 2 つのオプションがあります。

  1. 最初の 3 行だけを読み取ります。

    my @lines;
    while (<>) {
       push @lines, $_;
       last if @lines == 3;
    }
    
    die "Bad input" if @lines < 3;
    
  2. EOF を送信する前に 3 行以上入力すると、エラーがスローされます。

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