当我打印正则表达式的结果时,我试图用来控制直到循环,它给了我期望的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/

10-10 17:46