Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из хеш-массива вынуть n значений и сохранить. Сохранить надо в несколько переменных. 
V
    Опции темы
Marlik
Дата 24.4.2009, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Доброго времени суток, такая вот проблемка:

Прочитал куки, и подумал что их клали как ассоциативный массив, выглядят так:

Код

name:'мydak';email:'м[email protected]';is_authenticated:'1';sid:'zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo';
is_trusted:'1';is_author:'1';is_banned:'0';can_post:'1';can_comment:'1'


то-есть ключ => значение, вот теперь встала задачка как-бы мне проверить все значения, может кто знает более эффективный код, подскажите плз,  я решил сделать так, вырезать все не нужное и сохранить для проверки в чем-нибудь.

Код

@row = split(/\;/, "@session");
@session = split(/\:/, "@row");
@row = split(/\'/, "@session");

my %hash = @row;
my @keys;
my @values;

while((@keys, @values) = each(%hash)){
print "@keys, @values"; 
}


Теперь вот застрял на том как-бы мне строковой массив(или хэш) сохранить в переменных для последующей проверки? Перерыл кучу литературы так и не нашел, как вариант использовать ссылки, а потом их разыменовывать кажется это сложно. Спасибо.



Это сообщение отредактировал(а) Marlik - 24.4.2009, 04:54
PM WWW Skype   Вверх
gcc
Дата 24.4.2009, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



зачем тут хэш-массив?

что будет массивами?
PM WWW ICQ Skype GTalk Jabber   Вверх
Marlik
Дата 24.4.2009, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Честно говоря, он(ассоциативный массив), в принципе уже есть, то есть в строке присутствует как ключ так и значение, и этот массив легко преобразовать в обычный строковой, но не в этом суть, представим себе ассоциативный массив где необходимо из ключей сотворить скалярные переменные, а значения присвоить этим переменным. Если вдруг существуют методы проверки как ключей так и их значений ассоциативного массива, буду просто признателен, за ссылку или пример. Дело в том как Вы наверное заметили, значения ключей принимают различные типы данных, поэтому проверки довольно-таки затруднительны. Но, все равно, спасибо за участие.

Это сообщение отредактировал(а) Marlik - 24.4.2009, 04:48
PM WWW Skype   Вверх
arto
Дата 24.4.2009, 08:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



не могли бы вы написать по-русски, что вы хотите?
PM MAIL ICQ   Вверх
shamber
Дата 24.4.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Хотя бы намек на пример того чего вы хотите 
PM MAIL Jabber   Вверх
ginnie
Дата 24.4.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Marlik, Вы не обижайтесь, но за 8 лет программирования на Perl первый раз встречаю фрагменты:

Код

@row = split(/\;/, "@session");
@session = split(/\:/, "@row");
@row = split(/\'/, "@session");


и

Код

while((@keys, @values) = each(%hash)){
print "@keys, @values"; 
}


Не могли бы Вы пояснить, как они работают?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
DEER
Дата 24.4.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 1
Всего: 13



Вообще ИМХО правильнее так
Код

my $s = "name:'мydak';email:'мydak\@mail.ru';is_authenticated:'1';sid:'zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo';".
    "is_trusted:'1';is_author:'1';is_banned:'0';can_post:'1';can_comment:'1'";
my %h = map get_pair($_), split /;/, $s;
print 'sid='.$h{sid};

sub get_pair {
    return ($1, $2) if shift =~ /^(.*):(.*)$/;
    return (0, 0);
}


вызывая $h{имя_ключа} можно получить его значение.
проверить наличие можно так 
Код

if( exists $h{имя_параметра} ) {
print "парамерт есть!";
}


если я правильно понял что вам нужно smile

Это сообщение отредактировал(а) DEER - 24.4.2009, 13:57


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Marlik
Дата 24.4.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Уважаемый DEER, вы меня правильно поняли, и простите все меня за корявость кода, еще раз обьясню, есть переменная куда я прочел куки, выглядит так:

Код

my $s = "name:'мydak';email:'мydak\@mail.ru';is_authenticated:'1';sid:'zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo'; is_trusted:'1';is_author:'1';is_banned:'0';can_post:'1';can_comment:'1'";



теперь мне надо из этой переменной $s убрать все одинарные кавычки, точки с запятой и двоеточия, уважаемый DEER, с этим прекрасно справился, получаем вот такую переменную:

 
Код

my $s = "name мydak email мydak\@mail.ru is_authenticated 1 sid zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo is_trusted 1 is_author 1 is_banned 0 can_post 1 can_comment 1";


теперь если внимательно посмотреть то строка выглядит как обычный хэш-массив:

Код

my $s = "
name => мydak
email => мydak\@mail.ru
is_authenticated => 1 
sid => zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo 
is_trusted => 1 
is_author => 1 
is_banned => 0 
can_post => 1 
can_comment => 1
";


так вот задача заключалась в том, что-бы проверить ключ => значение, известно что name, email, sid, лежат в БД надо будет их сравнить, и проверить еще действительно-ли что к примеру is_trusted => 1 равно истине? Я подумал что если из переменной $s вынуть ключи создать из них переменные и присвоить этим переменным значения этих ключей, тогда проверка этих переменных дала-бы нужный результат:

Код

$name = "мydak";
$email = "мydak\@mail.ru";
$is_authenticated = 1; 
$sid = "zT07v3NbiIWKbbkFKlsGkTosi7ktVyIRDtNnBXmo"; 
$is_trusted = 1; 
$is_author = 1; 
$is_banned = 0; 
$can_post = 1; 
$can_comment = 1;


 спасибо.
PM WWW Skype   Вверх
DEER
Дата 24.4.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: 1
Всего: 13



тока зачем обратно в строку переводить?
используй хеш!


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Marlik
Дата 24.4.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Получилось конечно коряво, но пока срочняк, потом как-нить в цикле попробую.

Код

my $s = $cgi -> cookie(-name => 'blog_user');

my %h = map get_pair($_), split /;/, $s;

my ($sid, $name, $is_banned, $email, $can_post, $is_author, $can_comment, $is_trusted, $is_authenticated);

$sid = $h{sid};
$name = $h{name};
$is_banned = $h{is_banned};
$email = $h{email};
$can_post = $h{can_post};
$is_author = $h{is_author};
$can_comment = $h{can_comment};
$is_trusted = $h{is_trusted};
$is_authenticated = $h{is_authenticated};


Спасибо всем за участие.
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.