当我打印正则表达式的结果时,我试图用来控制直到循环,它给了我期望的1或null。为什么下面的代码不起作用,但是如果我取消注释第五行,它就可以正常工作吗?
print("Please enter 1, 2, 3 or 4 : ");
my $channelSelection = "";
until ($channelSelection =~ /^[1-4]$/) {
chomp(my $channelSelection = <STDIN>);
#last if ($channelSelection =~ /^[1-4]$/);
print ("Invalid choice ($channelSelection) please try again: ")
if ($channelSelection !~ /[1-4]/);
}
我确定这已在其他地方解决,但无法通过搜索找到它。为我指出正确的方向将是很棒的。
我通常会做类似的事情。
print("Please enter 1, 2, 3 or 4 : ");
my $channelSelection = "";
while (1) {
chomp(my $channelSelection = <STDIN>);
last if ($channelSelection =~ /^[1-4]$/);
print ("Invalid choice ($channelSelection) please try again: ") if ($channelSelection !~ /[1-4]/);
}
但是我试图摆脱无限循环。
最佳答案
这里的问题是您在循环内重新声明了$ channelSelection,但是循环外保留了旧值。从内部循环中删除“我的”。
关于regex - Perl正则表达式不会按预期中断直到循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/902254/