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
相关产品推荐
相关产品推荐

