RegEx с OR. Что я делаю неправильно? - PullRequest
2 голосов
/ 18 марта 2011

У меня есть этот скрипт, который по какой-то причине всегда возвращает -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's undef или пустая строка `` в качестве аргумента.

Кто-нибудь может увидеть, что не так?

Обновление : на основании ответов этот шов будет правильным.

sub scrub {
    my $a = shift;

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

1 Ответ

4 голосов
/ 18 марта 2011

Регулярное выражение не подходит для этой работы. Вы используете оператор eq для проверки на равенство строк, вы использовали оператор define () для проверки undef.

if ($a eq '' or $a eq '~' or not defined $a) {
    return -1;
}

Кстати, есть 4-е значение $ a, которое вернет -1 здесь, а именно, когда $ a равно уже -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...