RegEx与OR。我究竟做错了什么?

时间:2011-03-18 11:27:58

标签: regex perl

我有这个脚本因为某些原因总是返回-1

#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 4;

is(scrub(''), '-1');
is(scrub('~'), '-1');
is(scrub('undef'), '-1');
is(scrub('a'), 'a');

sub scrub {
    my $a = shift;

    if ($a =~ m/~|undef|/) {
        return -1;
    }

    return $a;
}

我想要的是,当-1或perl的~或空字符串``作为参数时,它只返回undef

有人能看出什么问题吗?

更新:根据回复,这种接缝是正确的方式。

sub scrub {
    my $a = shift;

    return ($a =~ m/^(~|undef|^$)$/) ? -1 : $a;
}

1 个答案:

答案 0 :(得分:4)

正则表达式不是此作业的正确工具。您使用eq运算符来测试字符串相等性,您使用defined()运算符来测试undef。

if ($a eq '' or $a eq '~' or not defined $a) {
    return -1;
}
顺便说一下,$ a的第4个值会在这里返回-1,即当$ a 已经 -1时。