перебор хэш массова в объекте

Модератор: Модераторы разделов

Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

перебор хэш массова в объекте

Сообщение gcc »

Код: Выделить всё

my %p = $query->Vars;


в %p пепедается массив fDomains из html, он есть, если посмотреть через Data::Dumper

Код: Выделить всё

dumper ($self->{p}->{fDomains});


Код: Выделить всё

'fDomains' => '2sdfsdf3sdf.org.ua�3dfgsdfdg.org.ua'


данный код не работает:

Код: Выделить всё

foreach $item (@{$self->{p}->{fDomains}}) {
             print $item;
             exit;
}



найти как сделать не смог
надо что-то добавить?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: перебор хэш массова в объекте

Сообщение diesel »

данный код не работает:

с какой формулировкой?
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

элементы не выводяться и exit не срабатывает

сказалт что надо splite

Код: Выделить всё

               my ($autor) = split /�/, @{$self->{p}->{fDomains}};
               print $autor;
               exit;

не работает, равняется 0

тоже не работает ничего нету:

Код: Выделить всё

print join '', @{$self->{p}->{fDomains}};



а что это за знак �?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: перебор хэш массова в объекте

Сообщение diesel »

gcc писал(а):
27.12.2008 12:12
а что это за знак �?

непечатный символ какой-то. или у тебя в шрифте просто такого нет.
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

нету непечатного символа

там надо под другому как-то

даже если и есть непечатальный символ, то должно вывестись как-то...

возможно этот сомивол разделяет элементы массива, все равно странно как-то... не понятно
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: перебор хэш массова в объекте

Сообщение diesel »

gcc писал(а):
27.12.2008 12:34
нету непечатный символа


Код: Выделить всё

my ($autor) = split /�/, @{$self->{p}->{fDomains}};


сплитать массив - нет смысла вроде
то есть если ты хочешь попробовать сплитать то надо без @{}.

в домашних условиях повторить эту структуру данных как-то можно?
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

повторить структуру 1 в 1 врядли и много времени займет вам это ставить

я тогда попробую под другому

Код: Выделить всё

sub new {
 my ($self, %common) = @_;
 $self = {
 se => undef,
 session => undef,
 he => undef,
 p => undef,
 };
 $self->{'se'} = $common{'se'} if $common{'se'};
 $self->{'session'} = $common{'session'} if $common{'session'};
 $self->{'he'} = $common{'he'} if $common{'he'};
 $self->{'p'} = $common{'p'} if $common{'p'};
 bless $self;
 return $self;
}

добавлю это:

Код: Выделить всё

 $self->{'fDomains'} = $common{'fDomains'} if $common{'fDomains'};

и передам этот массив не через хэше (хэш котоырй я написал в первом посте %p)

html такой:

Код: Выделить всё

      <select name="fDomains" size="10" multiple="multiple">
1.org
2.org
3.org
      </select>


этот код примерно как тут:
стиль написание кода и etc
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: перебор хэш массова в объекте

Сообщение diesel »

это ты в модуль пытаешься засунуть обработку сабмита формы с несколькими доменами?
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

да

сори если вопрос плохо сформулирован был

FETCHING THE PARAMETER LIST AS A HASH:

$params = $q->Vars;
print $params->{'address'};
@foo = split("\0",$params->{'foo'});
%params = $q->Vars;

use CGI ':cgi-lib';
$params = Vars;

Many people want to fetch the entire parameter list as a hash in which the keys are the names of the CGI parameters, and the values are the parameters' values. The Vars() method does this. Called in a scalar context, it returns the parameter list as a tied hash reference. Changing a key changes the value of the parameter in the underlying CGI parameter list. Called in a list context, it returns the parameter list as an ordinary hash. This allows you to read the contents of the parameter list, but not to change it.

When using this, the thing you must watch out for are multivalued CGI parameters. Because a hash cannot distinguish between scalar and list context, multivalued parameters will be returned as a packed string, separated by the "\0" (null) character. You must split this packed string in order to get at the individual values. This is the convention introduced long ago by Steve Brenner in his cgi-lib.pl module for Perl version 4.

If you wish to use Vars() as a function, import the :cgi-lib set of function calls (also see the section on CGI-LIB compatibility).
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

:unsure: :unsure:

Код: Выделить всё

@foo = split("\0",$params->{'foo'});

работает

я думал что там будет просто ссылка на массив, :blush: :blush: не обратил внимание :drunk:
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: перебор хэш массова в объекте

Сообщение gcc »

diesel писал(а):
27.12.2008 12:41
то есть если ты хочешь попробовать сплитать то надо без @{}.

именно так надо..
Спасибо сказали: