我只想在1到5之间给出输入时进入循环,否则它应该要求"输入有效选项:"
这是我尝试过的
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
print qq/\tMENU\n 1.BACKUP\n 2.RESTORE\n 3.TABLESPACES\n 4.BUFFERPOOLS\n 5.EXIT\n/;
print "Enter Your Choice : ";
while(<STDIN>){
chomp;
if (1..5){
print qq/wright\n/;
} else {
print qq/wrong\n/;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在中途,我试图检查它是否工作,但它不是......即使我给6或7 ......作为输入它给予写,我的意思是它进入如果循环而不是其他........帮助是赞赏........
小智 5
你的问题是1..5在标量上下文中是范围运算符的触发器版本.
一旦左操作数为真,范围运算符将保持为真,直到右操作数为真,此后范围运算符再次变为假.
1永远是真的,所以你的if语句在第一次通过时总是如此. 5也总是如此,因此if语句在第二次变为false并且之后保持为false.请注意,您的输入变量从不涉及任何此类变量.
你可以使用正则表达式,但如果你这样做,你需要锚定它:
if (/^[1-5]$/)
Run Code Online (Sandbox Code Playgroud)
锚确保整个字符串为1和5.如果你只是用之间的单个字符if (/[1-5]/),匹配任何包含一个数字1-5,所以1200并foo5算作有效.
但是,据推测,您将根据用户输入的内容执行五种不同的操作.因此,您可能根本不应该使用正则表达式,只需检查每个条件:
if ($_ == 1) { do something }
elsif ($_ == 2) { do something else }
elsif ($_ == 3) { do something else }
elsif ($_ == 4) { do something else }
elsif ($_ == 5) { do something else }
else { handle invalid input }
Run Code Online (Sandbox Code Playgroud)
您可以使用不同的语法来完成与Switch模块相同的操作(您包含但未在代码中实际使用):
switch ($_) {
case 1 { print "number 1" }
case 2 { print "number 2" }
case 3 { print "number 3" }
case 4 { print "number 4" }
case 5 { print "number 5" }
else { print "invalid" }
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性(如Raina77ow建议的那样)是使用smartmatch运算符.它有多种用途,包括检查数组中是否存在元素:
my @valid_input = (1..5); #Range operator in list context generates an array.
if ($_ ~~ @valid_input) { print "Input was a number between 1 and 5"; }
Run Code Online (Sandbox Code Playgroud)
您可以使用匿名数组引用([ ])来缩短该代码.
if ($_ ~~ [1..5]) { print "Input was a number between 1 and 5"; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |