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


Автор: ssdm 14.2.2011, 19:17
Добрый вечер.

Вот код.
Код


use strict;

use Params::Validate;

sub test{
 my  %hash = validate( @_, {
        host => { default => 'localhost'  } ,
        base => { default => 'base' } ,
        username => { default => 'username' },
        password => { default => '' },
    });

     foreach ( keys %hash){
           print $_."<===>".$hash{$_};
     }
     
}

my %connect_info = (
                     host => undef,
                     base => undef,
                     username => undef,
                     password => undef,
                   );


test(\%connect_info);



В итоге после вызова значения хеша остаются undef  , а не выставляются по дефолту. 
Хотелось бы , что бы при undef , выставлялась дефолтные значения. 
Подскажите как ?

Автор: vivu 14.2.2011, 22:18
Код

#!/usr/bin/perl

use strict;
use Params::Validate;
use Data::Dumper;

&test();

sub test{
 my  %hash = validate( @_, {
        host => { default => 'localhost'  } ,
        base => { default => 'base' } ,
        username => { default => 'username' },
        password => { default => '' },
    });

    die Dumper(\%hash);
}



у меня всё работает

Автор: ssdm 15.2.2011, 11:23
vivu, 
У вас все работает потому что вы вообще хеш не передаете, а в моем случае он передается.

Автор: arto 15.2.2011, 12:35
imho значения проверячтся не на defined, а на exists

Автор: vivu 15.2.2011, 23:21
Точно! Не увидел вторую часть скрипта.

Тогда вам нужно, как правильно заметил arto, не передавать пустой хеш, чтобы получить дефолтные значения.

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