0

我不完全确定为什么我的 if 语句没有验证用户输入。这是我的代码。包含正则表达式的语句应该允许前导和尾随空格。

sub     Menu
{

    &processlist;
    &creating_Refs;

    print "[Sort by COLUMN|sortup|sortdown| quit]:";
    my $user_input = <STDIN>;
    chomp($user_input);

    if($user_input =~ m/[quit\s]/)
    {
            exit;
    }
    elsif($user_input eq 'sortup')
    {
            print "working bro\n\n";
            @$VAR1 = sort sortup @$VAR1;

            foreach my $ref (@$VAR1)
            {
                    print "$ref->{PID}, $ref->{USER}, $ref->{PR}, $ref->{NI}, $ref->{VIRT}, $ref->{RES}, $ref->{SHR}, $ref->{S}, $ref->{CPU}, $ref->{MEM}, $ref->{TIME}, $ref->{COMMAND} \n";
            }
    }
    elsif($user_input eq 'sortdown \n')
    {
            print "working on sortdown\n\n";

    }
    elsif($user_input =~ m/[sort by]+\w/)
    {


    }
    else
    {
            print "Error, please re-enter command \n\n";
            &Menu;
    }

}

4

2 回答 2

4

类似的字符类[abcd]允许方括号中指定的任何字符当您说[sort by]时,它相当于/s|o|r|t| |b|y/,它将匹配这些字符中的任何一个,只匹配一次。如果要匹配sort by,请使用/sort by/.

在你的情况下:

if($user_input =~ m/quit/){
    exit;
}

并匹配确切的单词使用单词边界:

if($user_input =~ m/\bquit\b/){
    exit;
}
于 2013-04-29T00:48:15.773 回答
0
if($user_input =~ m/quit/){
    exit;
}

也 chomp 删除尾随 \n

所以:

elsif($user_input eq 'sortdown \n')

永远不会是真的。

于 2013-04-29T00:50:27.117 回答