Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Use of uninitialized value ...


Автор: infarch 21.6.2013, 11:55
Помогите пожалуйста понять что означает этот варнинг: "Use of uninitialized value within @_ in list assignment at /bb_projekt/docia/perl/lib/Backbone/TB.pm line 289."

В указанном модуле в строке 289 происходит присваивание:
Код

sub set {
    my($self,$columnname,$value) = @_; # line 289
    ...
    ...


Ошибка не моя, из чужого кода. Я даже воспроизвести не могу ( . 

Автор: ginnie 21.6.2013, 12:17
infarch,  с приведенным кодом появление указанной ошибки маловероятно. У меня воспроизводится с таким:
Код

#!/usr/bin/perl

use strict;
use warnings;

sub test {
    my ($var1, $var2, %var3) = @_;
    return;
}


test(1,2,undef,3);

Автор: infarch 21.6.2013, 12:38
Так и у меня воспроизводится. Но вот в том то коде не хеш в параметрах стоит, а скаляр...

Автор: infarch 21.6.2013, 13:26
Варнинг я устранил, но вот почему он вообще появлялся не могу понять.
Там была вот такая строка: 
Код

$directory_obj->set("ParentDirectory_ID", $dirlookup{$directory_obj->get("ParentDirectory_ID")});

Проблема возникала когда функция $directory_obj->get("ParentDirectory_ID") возвращала undef. Причем если переписать вот так:
Код

my $xxx = $dirlookup{$directory_obj->get("ParentDirectory_ID")};
$directory_obj->set("ParentDirectory_ID", $xxx);

то варнинга опять таки небыло.

Автор: ginnie 21.6.2013, 13:53
infarch,  это мистика какая-то, а что выдает в случае явного указания undef в ключе хэша?

Код

my $xxx = $dirlookup{undef()};


P.S. на тестовый код 
Код

#!/usr/bin/perl

use strict;
use warnings;

sub key { return; }
sub test {
    my ($var1, $var2, $var3) = @_;
    return;
}

my %hash;
test(1,2,$hash{key()});

perl v5.16.2 выдает предупреждения
Код

Use of uninitialized value in hash element at ./undef_test.pl line 13.
Use of uninitialized value within @_ in list assignment at ./undef_test.pl line 8.

похоже $hash{undef()}, если ключа undef() в хэше нет -  это какое-то специальное значение, о котором и выводится отдельное предупреждение

Автор: infarch 21.6.2013, 16:11
Я уже к сожелению не протестирую. Клиент возрадовался что варнинг пропал, запустил сайт и больше опытов делать не будет. Разве что еще какой варнинг найдет )

Автор: infarch 21.6.2013, 16:11
Я уже к сожелению не протестирую. Клиент возрадовался что варнинг пропал, запустил сайт и больше опытов делать не будет. Разве что еще какой варнинг найдет )

Автор: Cyr 13.10.2015, 11:14
У меня есть процедура 
Код

sub    AnswerCall{
    my $connectionID = shift;
    #берём трубку
    if (defined $connectionID) {
        my $pdu = $CSTAapdu->encode({svcRequest=>{
                                    invokeID=>10,
                                    serviceID=>2,
                                    serviceArgs=>{
                                        callToBeAnswered=>$connectionID
                                                }
                                            }
                                });    
        send_pdu($pdu);
    }
}

При выполнении my $pdu = $CSTAapdu->encode... warning: 
"Use of uninitialized value in concatenation (.) or string at
        D:/strawberry/perl/vendor/lib/Convert/ASN1/_encode.pm line 60 (#1)
    (W uninitialized) An undefined value was used as if it were already
    defined.  It was interpreted as a "" or a 0, but maybe it was a mistake.
    To suppress this warning assign a defined value to your variables."
Не знаю, в чём проблемма и как исправить

Автор: arto 13.10.2015, 12:39
похоже у вас ошибка при инициализации парсера.
мобно посмотреть, что у _encode.pm в строке 60

Автор: Cyr 13.10.2015, 12:43
arto
там строка
$_[4] .= $op->[cTAG];

Автор: arto 19.10.2015, 08:25
отследить, почему в $op->[cTAG] undef.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)