Perl жалуется на неинициализированное значение в регулярном выражении - PullRequest
1 голос
/ 12 октября 2011

У меня есть функция ниже:

sub getMinFromParam {
    my ($param) = @_;

    print "PPPP = $param\n";

    my $min;
    if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {
    print "IN HERE\n";
        $min = $1;
    }
    elsif ($min =~ /((\w+),)+/) {
        my @tmp = split (/\s*,\s*/, $param);
        if ($tmp[0] =~ /\[(\w+),\s?(\w+)\]/) {
            $min = $1;
        }
        else {
            $min = $tmp[0];
        }
    }
    return ($min);
}

Когда $ param представляет собой строку типа: 120u, 421u, 53, 19, 41u, 53, Я получаю сообщение об ошибке: Использование неинициализированного значения в сопоставлении с образцом (m //) в этой строке:

if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {

Почему вы жалуетесь на неинициализированное значение при определении $ param?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Это не так.Он жалуется на эту строку:

elsif ($min =~ /((\w+),)+/) {

По крайней мере, здесь с тестовыми данными 120u, 421u, 53, 19, 41u, 53

Что ожидается, поскольку $min устанавливается только, если $param соответствует, ноelsif запускается, только если $param не совпадает.

Эта строка, вероятно, должна быть elsif ($param =~ /((\w+),)+/) {, и в этом случае я не получаю предупреждение.

0 голосов
/ 12 октября 2011

Это на самом деле $min, который не определен, и он сообщается, когда вы используете strict и warnings.Это исправляет это:

use strict;
use warnings;

sub getMinFromParam
{
    my ($param) = @_;

    print "PPPP = $param\n";

    my $min;
    if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/)
    {
        print "IN HERE\n";
        $min = $1;
    }
    elsif (defined $min && $min =~ /((\w+),)+/)
    {
        my @tmp = split (/\s*,\s*/, $param);
        if ($tmp[0] =~ /\[(\w+),\s?(\w+)\]/)
        {
            $min = $1;
        }
        else
        {
            $min = $tmp[0];
        }
    }
    return ($min);
}

getMinFromParam "120u, 421u, 53, 19, 41u, 53"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...