You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl脚本:无需减1即可通过用户输入1-7匹配数组值的实现方法

解决Perl脚本输入1-7直接匹配内容的问题

嘿,这个问题我之前也碰到过——Perl数组默认是0起始索引,所以用$number - 1来取元素确实有点不符合直觉。这里有几种不用调整输入值就能直接匹配对应内容的方案,你可以按需选择:

1. 使用哈希表(最推荐,可读性拉满)

哈希表的键可以直接用1-7这些数字,对应的值就是要输出的内容,完全不用管索引的问题,逻辑非常直观:

#!/usr/bin/perl
use strict;
use warnings;

print "Enter a number (1-7): ";
my $number = <STDIN>;
chomp $number;

my %day_messages = (
    1 => "Sunday. Small cup of tea.",
    2 => "Monday. Large cup of coffee.",
    3 => "Tuesday. Medium cup of latte.",
    4 => "Wednesday. Espresso shot.",
    5 => "Thursday. Iced coffee.",
    6 => "Friday. Hot chocolate.",
    7 => "Saturday. Herbal tea.",
);

if (exists $day_messages{$number}) {
    print $day_messages{$number}, "\n";
} else {
    print "Please enter a number between 1 and 7.\n";
}

这种方法的好处是,后续要修改对应关系或者新增内容时,直接改哈希表就行,维护起来特别方便。

2. 给数组补一个空的首元素

如果还是想用数组,那我们可以在数组的索引0位置放一个空字符串,这样输入的数字就能直接对应数组的索引:

#!/usr/bin/perl
use strict;
use warnings;

print "Enter a number (1-7): ";
my $number = <STDIN>;
chomp $number;

my @day_messages = (
    '', # 占位,让索引1对应第一个内容
    "Sunday. Small cup of tea.",
    "Monday. Large cup of coffee.",
    "Tuesday. Medium cup of latte.",
    "Wednesday. Espresso shot.",
    "Thursday. Iced coffee.",
    "Friday. Hot chocolate.",
    "Saturday. Herbal tea.",
);

if ($number >= 1 && $number <=7) {
    print $day_messages[$number], "\n";
} else {
    print "Invalid input. Please enter 1-7.\n";
}

这个方法改动最小,适合你不想替换原有数组结构的情况,只是多了个占位元素而已。

3. 使用given-when结构(Perl 5.10+支持)

如果你的Perl版本是5.10或以上,可以用更简洁的given-when来做匹配,连数组哈希都不用:

#!/usr/bin/perl
use strict;
use warnings;
use feature 'switch'; # 必须开启switch特性

print "Enter a number (1-7): ";
my $number = <STDIN>;
chomp $number;

given ($number) {
    when (1) { print "Sunday. Small cup of tea.\n" }
    when (2) { print "Monday. Large cup of coffee.\n" }
    when (3) { print "Tuesday. Medium cup of latte.\n" }
    when (4) { print "Wednesday. Espresso shot.\n" }
    when (5) { print "Thursday. Iced coffee.\n" }
    when (6) { print "Friday. Hot chocolate.\n" }
    when (7) { print "Saturday. Herbal tea.\n" }
    default { print "Please enter a number between 1 and 7.\n" }
}

这种方式逻辑清晰,适合每个分支需要做更多操作的场景,不只是简单输出字符串。

以上几种方法都能避免对输入值做减1操作,你可以根据自己的代码风格和需求来选择~

内容的提问来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:57