Perl脚本数组和标量精确定位

时间:2013-04-28 05:21:56

标签: perl

sub main{
my $mark;
my $grade;
my $calc;

@grade = ($mark>=0 and $mark<=39,$mark>=40 and $mark<=49,$mark>=50 and $mark<=59);
@calc(F+,D+,B+);

print "What is the student’s mark?"
chomp($mark = <STDIN>);

print "Your mark is 'mark' and grade is 'calc'"
}
main();

您好我是初学者,我想做的是制作不同的标记块,例如@mark(0-39,40-49,50-59)将分别指向@calc(F +,D +,B +)。之后我可以打印出来自该商标的$ mark以及与该商标对应的等级。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

首先,始终使用use strict; use warnings;

从最佳字母开始,找到范围开始小于标记的第一个字母。

my @letters      = qw( F+ D+ B+ );
my @letter_marks =   (  0,40,50);

sub get_letter {
   my ($mark) = @_;
   for my $i (reverse 0 .. $#letters_marks) {
       return $letters[$i] if $mark >= $letter_marks[$i];
   }
   die "Invalid input";
}

答案 1 :(得分:1)

您可以使用一系列成绩。数组的每个条目都可以是一个哈希表,其中包含该成绩的名称以及该成绩的最小值和最大值:

my @grades = (
    { name => 'F+', min => 0, max => 39 },
    { name => 'D+', min => 40, max => 49 },
    { name => 'B+', min => 50, max => 59 }
    );

print "What is the student’s mark?\n";
chomp(my $mark = <STDIN>);

my $calc = "Unknown";
foreach my $grade (@grades) {
    if ($grade->{min} <= $mark && $mark <= $grade->{max}) {
        $calc = $grade->{name};
    }
}

print "Your mark is '$mark' and grade is '$calc'\n";