生徒のマークを集めて、上で得点したものを印刷するスクリプトを書きました50
。
スクリプトは以下のとおりです。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array = (
'STUDENT1,90
STUDENT2,40
STUDENT3,30
STUDENT4,30
');
print Dumper(\@array);
my $class = "3";
foreach my $each_value (@array) {
print "EACH: $each_value\n";
my ($name, $score ) = split (/,/, $each_value);
if ($score lt 50) {
next;
} else {
print "$name, \"GOOD SCORE\", $score, $class";
}
}
ここでは、STUDENT1のスコアが50より大きいため、STUDENT1のデータを印刷したいと思いました。したがって、出力は次のようになります。
STUDENT1, "GOOD SCORE", 90, 3
しかし、その印刷出力は次のようになります。
STUDENT1, "GOOD SCORE", 90
STUDENT2, 3
ここでいくつかの操作が発生し、その間90 STUDENT2
に破棄して分離します。
配列に単一の要素があるため、改行文字でデータを分割していなかったことがわかり@array
ます。
配列内の要素を新しい行に分割して、forループ内でコンマ(,
)を使用して再度分割し、値を$name
とに設定するにはどうすればよいですか$score
。
実際に@array
は、このスクリプトの引数として来ています。したがって、正しい値を解析するには、このスクリプトを変更する必要があります。
すでにご存知のように、「配列」には実際のレコードを含む文字列を含む「要素」が1つしかないため、本質的には配列よりもスカラーです。
ご想像のとおり、このスカラーは、改行をコンマではなく区切り文字として使用した場合と同じように分割できます。次にforeach
、の結果を回避しsplit()
て、レコードを反復処理できます。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $records = 'STUDENT1,90
STUDENT2,40
STUDENT3,30
STUDENT4,30
';
my $class = "3";
foreach my $record (split("\n", $records)) {
my ($name, $score) = split(',', $record);
if ($score >= 50) {
print("$name, \"GOOD SCORE\", $score, $class\n");
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加