Perl if语句/正则表达式

时间:2013-04-29 00:44:56

标签: regex perl if-statement

我不完全确定为什么我的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;
    }

}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

同时chomp删除尾随\ n

所以:

elsif($user_input eq 'sortdown \n')

永远不会成真。

相关问题