Name Mark1 Mark2 Mark3
Student 1 41 51 61
Student 2 42 52 62
Student 3 43 53 63
Student 4 44 54 64
Student 5 45 55 65
当我将Name
作为输入时,我需要输出三个Mark
列。我怎么能这样做?
答案 0 :(得分:0)
假设这是一个名为@arr
的数组,其中每个条目都是一行,并且假设您要查找的学生编号在$num
,您可以使用:
foreach (@arr) {
if (/^Student \b$num\b\s+(\d.*\d)/) {
print "$2\n";
}
}
这会迭代数组中的所有条目。它寻找以下行:
$num
(其周围的\b
指定字边界,因此这不能是另一个数字的一部分)如果是,则捕获并打印以数字开头和结尾的图案。在这种情况下,它完全对应于Mark1,Mark2& MARK3。
答案 1 :(得分:0)
#!/usr/bin/perl
use warnings;
use strict;
my %hash = ();
print "Student No:"; #Eg:Student 1
chomp ( my $input = <>);
while (<DATA>) {
next if /^Name/;
chomp;
my ($student, $no, @marks) = split;
$hash{ "$student " . "$no" } = \@marks;
}
print join " ", @{$hash{ "$input" }};
__DATA__
Name Mark1 Mark2 Mark3
Student 1 41 51 61
Student 2 42 52 62
Student 3 43 53 63
Student 4 44 54 64
Student 5 45 55 65