perl while循环中使用eq运算符的意外行为。 while循环不会停止

时间:2017-11-21 14:01:15

标签: perl

虽然标量$quit明显不等于'j',但下面的循环不会停止。 为什么不停止?

#!/usr/bin/perl -w

use strict;
my $quit = 'j';

while ($quit eq 'j') {

    print "Enter whatever value you want and I bet I still continue.\n";
    chomp (my $quit = <STDIN>);
    print "quit equals: $quit\n";

} 

3 个答案:

答案 0 :(得分:6)

在循环内,您要使用$quit关键字创建新的my变量:

chomp (my $quit = <STDIN>);

您实际上想要分配给现有变量:

chomp($quit = <STDIN>);

请注意,Perl::Critic之类的Perl linting程序会提醒您注意此问题:

  

在词法范围内重用变量名:$ quit at第9行,第12列。创建唯一变量名。 (严重程度:3)

答案 1 :(得分:4)

您在循环中重新定义$quitchomp (my $quit = <STDIN>);删除此行中的my

#!/usr/bin/perl -w
use strict;
my $quit = 'j';

while ($quit eq 'j') {

    print "Enter whatever value you want and I bet I still continue.\n";
    chomp ($quit = <STDIN>);
    print "quit equals: $quit\n";

} 

答案 2 :(得分:1)

因为你在while循环中定义了一个新变量$ quit。 这就是你想要的:

chomp ($quit = <STDIN>);

所以,没有'我的'。