Автор Тема: Народ, подскажите  (Прочитано 6591 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« : 02 Апреля 2001, 23:10:28 »
Требуется сделать следующее на перле:
Пердаем подпраграмме хеш (например %hesh),
подпрограмма должна изменить некоторые элементы хеша и вернуть измененный хеш.
Кто подскажет решение?
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Народ, подскажите
« Ответ #1 : 03 Апреля 2001, 06:58:22 »
Цитировать
polo (03-04-2001 00:10):
Требуется сделать следующее на перле:
Пердаем подпраграмме хеш (например %hesh),
подпрограмма должна изменить некоторые элементы хеша и вернуть измененный хеш.
Кто подскажет решение?
В подпрограмму передать ссылку на хеш.
2B OR NOT 2B = FF

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #2 : 03 Апреля 2001, 21:17:14 »
Можно подробнее.
Например имеем следующее:
%hesh=&podprog(%hesh); #предпологается что хеш уже определен
sub podprog {
%hesh=shift;
сдесь изменяем некоторые елементы, как это можно сделать;
return %hesh; #вернуть модифицированный хеш
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Народ, подскажите
« Ответ #3 : 03 Апреля 2001, 21:38:09 »
Цитировать
polo (03-04-2001 21:17):
Можно подробнее.
Например имеем следующее:
%hesh=&podprog(%hesh); #предпологается что хеш уже определен
sub podprog {
%hesh=shift;
сдесь изменяем некоторые елементы, как это можно сделать;
return %hesh; #вернуть модифицированный хеш
Можно:
my %hash;
&podprog(\\%hash);

sub podprog {
 my $hr=shift;

 $$hr{\'abc\'} = \'edf\';
}
2B OR NOT 2B = FF

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #4 : 04 Апреля 2001, 22:31:20 »
Все равно не могу разобраться, изложу все полностью, кто знает решение напишите пожалуйста код:

#допустим имеем хеш
%hesh (
name => \'ivan \',
first name=> \'badi\',
city => \'Moskva\',
Country => \'Rossia\'
);
#далее иммее подпрограмму
sub podprog {
%hesh =  &edit_hesh(%hesh); #изменяяем хеш
&other(%hesh); #выполняяем другие операции с измененым хешем хешем
}

sub edit_hesh {
#как написать эту подпрограмму так что-бы она изменила #эллементы
#name => \'ivan \',
#first name=> \'badi\',
#на
#name => \'ivan \',
#first name=> \'badi\',
#и вернула измененный хеш
}
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Народ, подскажите
« Ответ #5 : 05 Апреля 2001, 07:10:40 »
Цитировать
polo (04-04-2001 22:31):
Все равно не могу разобраться, изложу все полностью, кто знает решение напишите пожалуйста код:

#допустим имеем хеш
%hesh (
name => \'ivan \',
first name=> \'badi\',
city => \'Moskva\',
Country => \'Rossia\'
);
#далее иммее подпрограмму
sub podprog {
%hesh =  &edit_hesh(%hesh); #изменяяем хеш
&other(%hesh); #выполняяем другие операции с измененым хешем хешем
}

sub edit_hesh {
#как написать эту подпрограмму так что-бы она изменила #эллементы
#name => \'ivan \',
#first name=> \'badi\',
#на
#name => \'ivan \',
#first name=> \'badi\',
#и вернула измененный хеш
}
Решение чуть выше.:):)
2B OR NOT 2B = FF

Оффлайн cj

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netcode.lgg.ru/
Народ, подскажите
« Ответ #6 : 05 Апреля 2001, 11:35:50 »
Цитировать
polo (04-04-2001 22:31):
Все равно не могу разобраться, изложу все полностью, кто знает решение напишите пожалуйста код:

#допустим имеем хеш
%hesh (
name => \'ivan \',
first name=> \'badi\',
city => \'Moskva\',
Country => \'Rossia\'
);
#далее иммее подпрограмму
sub podprog {
%hesh =  &edit_hesh(%hesh); #изменяяем хеш
&other(%hesh); #выполняяем другие операции с измененым хешем хешем
}

sub edit_hesh {
#как написать эту подпрограмму так что-бы она изменила #эллементы
#name => \'ivan \',
#first name=> \'badi\',
#на
#name => \'ivan \',
#first name=> \'badi\',
#и вернула измененный хеш
}

1. Кончай баловаться с передачей хеша по-значению.
2. Это делается так:

# Создаем ссылку на анонимный хеш. Значения полей изменить по-вкусу

my $hash = { "Name" => "Ivan", "Country" => "Russia", "City" => "Moscow" };

Main();

# Имя функции - любое :-)
sub Main
{
    AlterHash($hash);
    ChopHash($hash);
}

# Функция, которая что-то делает с хэшем
sub AlterHash($)
{
    my $h = shift();
    $h->{"Name"} = "$h->{\'Name\'}";
    $h->{"City"}   = "$h->{\'City\'}";

    # Все. Возвращать ничего не надо, хеш уже изменен.
}

# Надеюсь, теперь все ясно?
Here comes the pain...
http://netcode.lgg.ru/

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #7 : 05 Апреля 2001, 23:20:05 »
А как в my $hesh поместить %hesh  а то я написал
my $hesh = {%hesh};
и ничего.
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #8 : 05 Апреля 2001, 23:27:17 »
Цитировать
polo (05-04-2001 23:20):
А как в my $hesh поместить %hesh  а то я написал
my $hesh = {%hesh};
и ничего.
my $hesh = keys %hesh;
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #9 : 05 Апреля 2001, 23:34:15 »
Поставлю вопрос по другому:
%hesh это данные переданные из формы, требуется обработать некоторые поля (удалить хтмл теги), а потом записать результаты в файл, это делает подпрограмма которая разделяет эллементы хеша и вписывает их в файл (el1|el2|и т.д.|). Навернека здесь другое решение.
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Народ, подскажите
« Ответ #10 : 06 Апреля 2001, 07:10:37 »
Цитировать
polo (05-04-2001 23:34):
Поставлю вопрос по другому:
%hesh это данные переданные из формы, требуется обработать некоторые поля (удалить хтмл теги), а потом записать результаты в файл, это делает подпрограмма которая разделяет эллементы хеша и вписывает их в файл (el1|el2|и т.д.|). Навернека здесь другое решение.
Успокоились и проводим получасовую медитацию на тему "а что же мне ответили?"  с привлечением документации и perldoc perldata. Если не поможет - повторить.
И так до полного просветления.:)
Ведь как это сделать уже ответили два раза два разных человека.
И другой способ наверняка есть!:))
2B OR NOT 2B = FF

Оффлайн cj

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netcode.lgg.ru/
Народ, подскажите
« Ответ #11 : 06 Апреля 2001, 07:41:10 »
Цитировать
polo (05-04-2001 23:20):
А как в my $hesh поместить %hesh  а то я написал
my $hesh = {%hesh};
и ничего.

А зачем? Создавай сразу указателем на анонимный хеш. А если очень надо, то my $hash = \\%hash;
Here comes the pain...
http://netcode.lgg.ru/

Оффлайн cj

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netcode.lgg.ru/
Народ, подскажите
« Ответ #12 : 06 Апреля 2001, 07:43:57 »
Цитировать
Chs (06-04-2001 07:10):
Успокоились и проводим получасовую медитацию на тему "а что же мне ответили?"  с привлечением документации и perldoc perldata. Если не поможет - повторить.
И так до полного просветления.:)
Ведь как это сделать уже ответили два раза два разных человека.
И другой способ наверняка есть!:))

perldata не всегда ведет с полному просветлению ;-) По себе знаю. ;-) Тем более когда о указателях (называемый в Перл ссылками) и о кастинге никогда не слышал ;-)
Here comes the pain...
http://netcode.lgg.ru/

Оффлайн cj

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netcode.lgg.ru/
Народ, подскажите
« Ответ #13 : 06 Апреля 2001, 07:53:30 »
Цитировать
polo (05-04-2001 23:34):
Поставлю вопрос по другому:
%hesh это данные переданные из формы, требуется обработать некоторые поля (удалить хтмл теги), а потом записать результаты в файл, это делает подпрограмма которая разделяет эллементы хеша и вписывает их в файл (el1|el2|и т.д.|). Навернека здесь другое решение.

Ну что тут может быть сложного? :-)

Пример:

use CGI;
my $CGI = new CGI;
my @params = $CGI->param();
my @records;
foreach my $param (@params)
{
my $value = $CGI->param($param);
# Тут со значением параметра сделать все, что угодно :-)
$value = "$value";
push(@records, $value);
}

my $record = join(\'|\', @records);
# Строку $record записать куда надо.

Ты это имел ввиду?
Here comes the pain...
http://netcode.lgg.ru/

Оффлайн polo

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://netadmin.ws
Народ, подскажите
« Ответ #14 : 06 Апреля 2001, 22:36:55 »
Ну не совсем это, если бы я писал программу с нуля то я бы это решил без проблем, а я хочу модифицировать код другой программы. Возможно ли модифицировать это таким путем как я описал выше.
- Сервер Сетевых Администраторов
- Форум сетевых администраторов - Огромная колекция веб клипарта

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28