Forum Webscript.Ru
Программирование => Perl => Тема начата: polo от 02 Апреля 2001, 23:10:28
-
Требуется сделать следующее на перле:
Пердаем подпраграмме хеш (например %hesh),
подпрограмма должна изменить некоторые элементы хеша и вернуть измененный хеш.
Кто подскажет решение?
-
polo (03-04-2001 00:10):
Требуется сделать следующее на перле:
Пердаем подпраграмме хеш (например %hesh),
подпрограмма должна изменить некоторые элементы хеша и вернуть измененный хеш.
Кто подскажет решение?
В подпрограмму передать ссылку на хеш.
-
Можно подробнее.
Например имеем следующее:
%hesh=&podprog(%hesh); #предпологается что хеш уже определен
sub podprog {
%hesh=shift;
сдесь изменяем некоторые елементы, как это можно сделать;
return %hesh; #вернуть модифицированный хеш
-
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\';
}
-
Все равно не могу разобраться, изложу все полностью, кто знает решение напишите пожалуйста код:
#допустим имеем хеш
%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\',
#и вернула измененный хеш
}
-
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\',
#и вернула измененный хеш
}
Решение чуть выше.:):)
-
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\'}";
# Все. Возвращать ничего не надо, хеш уже изменен.
}
# Надеюсь, теперь все ясно?
-
А как в my $hesh поместить %hesh а то я написал
my $hesh = {%hesh};
и ничего.
-
polo (05-04-2001 23:20):
А как в my $hesh поместить %hesh а то я написал
my $hesh = {%hesh};
и ничего.
my $hesh = keys %hesh;
-
Поставлю вопрос по другому:
%hesh это данные переданные из формы, требуется обработать некоторые поля (удалить хтмл теги), а потом записать результаты в файл, это делает подпрограмма которая разделяет эллементы хеша и вписывает их в файл (el1|el2|и т.д.|). Навернека здесь другое решение.
-
polo (05-04-2001 23:34):
Поставлю вопрос по другому:
%hesh это данные переданные из формы, требуется обработать некоторые поля (удалить хтмл теги), а потом записать результаты в файл, это делает подпрограмма которая разделяет эллементы хеша и вписывает их в файл (el1|el2|и т.д.|). Навернека здесь другое решение.
Успокоились и проводим получасовую медитацию на тему "а что же мне ответили?" с привлечением документации и perldoc perldata. Если не поможет - повторить.
И так до полного просветления.:)
Ведь как это сделать уже ответили два раза два разных человека.
И другой способ наверняка есть!:))
-
polo (05-04-2001 23:20):
А как в my $hesh поместить %hesh а то я написал
my $hesh = {%hesh};
и ничего.
А зачем? Создавай сразу указателем на анонимный хеш. А если очень надо, то my $hash = \\%hash;
-
Chs (06-04-2001 07:10):
Успокоились и проводим получасовую медитацию на тему "а что же мне ответили?" с привлечением документации и perldoc perldata. Если не поможет - повторить.
И так до полного просветления.:)
Ведь как это сделать уже ответили два раза два разных человека.
И другой способ наверняка есть!:))
perldata не всегда ведет с полному просветлению ;-) По себе знаю. ;-) Тем более когда о указателях (называемый в Перл ссылками) и о кастинге никогда не слышал ;-)
-
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 записать куда надо.
Ты это имел ввиду?
-
Ну не совсем это, если бы я писал программу с нуля то я бы это решил без проблем, а я хочу модифицировать код другой программы. Возможно ли модифицировать это таким путем как я описал выше.
-
polo (06-04-2001 22:36):
Ну не совсем это, если бы я писал программу с нуля то я бы это решил без проблем, а я хочу модифицировать код другой программы. Возможно ли модифицировать это таким путем как я описал выше.
Можно. Замени в моем примере где надо $hash на \\%hash :-)