The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"PERL текст2вар"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"PERL текст2вар"  
Сообщение от Azudim email(??) on 18-Июн-08, 02:55 
Подскажите плз, как можно Пёрлом превратить строку "id_1,id_2,id_3" в массив ссылок на переменные вида (\$id_1, \$_id2, \$_id3) ?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "PERL текст2вар"  
Сообщение от angra (ok) on 18-Июн-08, 03:05 
При помощи eval, может еще при помощи глобов, но не пробовал.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "PERL текст2вар"  
Сообщение от Azudim email(??) on 18-Июн-08, 11:13 
>При помощи eval, может еще при помощи глобов, но не пробовал.

С eval вроде как получилось. Задача 1: делать выборку из BD из столбцов id_1,id_2,id_3
------------------------------------------------
use DBI;

@cols = qw (id_1, id_2, id_3);

sub test {
my $cols = shift;
my @cols = @$cols;

$sql_qv = "SELECT " . join ('',@cols) . " FROM table";
sql_execute($sql_qv);
foreach $k (@cols) {                    
        $var_ref = "\\\$".$k;          
        push (@bind_vars_ref, $var_ref);
        }                                      

$bind_eval = "\$sql_res->bind_columns(" . join('',@bind_vars_ref) . ")\;";
eval ($bind_eval);  #***** $sql_res->bind_columns(\$id_1,\$id_2,\$id_3);

#-------------------------------------------
# А вот задача 2: в хешь %row_data заганять в ключи с именами из того же массива, что был # пеердан в функцию - значения переменных, связанных с колонками на предыдущем
# этапе. если явно указать то будет выглядеть так:  

while ($sql_res->fetchrow_arrayref) {
    my %row_data;                    
    $row_data{ID_1} = $id_1;
    $row_data{ID_2} = $id_2;
    $row_data{ID_3} = $id_3;
    push(@view_data, \%row_data);
    }
#А как сделать с использованием массива @cols, что бы ключи хэша имели имена и главное значения присваивались ?
}

  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "PERL текст2вар"  
Сообщение от angra (ok) on 19-Июн-08, 06:46 
Если я правильно понял:
$ perl -Mstrict -MData::Dumper -e 'my( $id_1,$id_2)=("val1", "val2");my @a=qw(id_1 id_2);my %h;eval "\$h{$_}=\$$_" foreach @a;print Dumper(\%h);'

$VAR1 = {
          'id_2' => 'val2',
          'id_1' => 'val1'
        }
Кстати, зачем такие извраты с биндом колонок и запятыми в @cols, мне осталось не ясно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "PERL текст2вар"  
Сообщение от anonymous (??) on 18-Июн-08, 04:02 
Можно использовать символьные ссылки.  Приблизительно так:

user@host:~$ perl
$x = 'hello';
$y = 'x';
print $$y;
hello

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "PERL текст2вар"  
Сообщение от angra (??) on 18-Июн-08, 05:29 
Вот только не работает для лексических переменных и выдает ошибку при use strict "refs".
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "PERL текст2вар"  
Сообщение от XAnder (ok) on 18-Июн-08, 13:03 
>Подскажите плз, как можно Пёрлом превратить строку "id_1,id_2,id_3" в массив ссылок на
>переменные вида (\$id_1, \$_id2, \$_id3) ?

В одну строчку так:

@результат = map {\$$_} split m/,/, "наша_строка";

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру