Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 24 Ноября 2006, 05:47:07

Название: Трабл с хэшем
Отправлено: DartSidius от 24 Ноября 2006, 05:47:07
Есть например хэш

%hash = (
 "text" => {
       type=>"".&get_types(%hash)."",
       name="text"
  },
  "textarea" => {
       type=>"".&get_types(%hash)."",
       name="textarea"
  }
);

sub get_types {

  my %get_types = @_;
  my $keys = "";
  foreach(sort keys %get_types) {
      if(exists($get_types{$_}) {my $keys .= "$_;"}
  }

 return $keys;

}


собственно с помощью функции get_types должны изыматься ключи хэша, но хэш не передаётся в функции...я так понимаю это из-за того что он передаётся из самого себя...может как то можно решить?
Название: Трабл с хэшем
Отправлено: NeoNox от 24 Ноября 2006, 12:44:49
ссылку передавай и будет тебе щастье (с)
Кстати, а в одной теме нельзя все эти вопросы задавать, зачем плодить?
Название: Трабл с хэшем
Отправлено: DartSidius от 24 Ноября 2006, 16:12:20
Цитировать
NeoNox:
ссылку передавай и будет тебе щастье (с)


э...т.е. вот так get_types(\\%hash)

а в sub\'e считывать как?...\\@_?

Цитировать
NeoNox:
Кстати, а в одной теме нельзя все эти вопросы задавать, зачем плодить?


Почему же...можно конечно...но вопросы разные, вдруг кто-то будет искать...и не будет повторных тем плодить


о и ещё...А МОЖНО КАК-НИБУДЬ УЗНАТЬ КЛЮЧ ПОСЛЕДНЕГО ЭЛЕМЕНТА ХЭША? (только не алгоритм...его то я сделал...может как-нибудь по простому в перле можно?)
Название: Трабл с хэшем
Отправлено: NeoNox от 24 Ноября 2006, 17:12:56
%h = (aaa=>1, bbb=>2, ccc=>3);

get_types(\\%h);

sub get_types
{

for (keys %{$_[0]})
{
 print "$_ => ${$_[0]}{$_} \\n";
}

}

Ну или красивее обернуть без переменных по умолчанию.

В хеше нет последнего элемента, ровно как и первого, это несортированный список, не путать с массивом.
Название: Трабл с хэшем
Отправлено: DartSidius от 24 Ноября 2006, 17:16:58
Цитировать
NeoNox:
В хеше нет последнего элемента, ровно как и первого, это несортированный список, не путать с массивом.



точно...затипил :)
Название: Трабл с хэшем
Отправлено: DartSidius от 24 Ноября 2006, 17:23:18
Цитировать
NeoNox:
for (keys %{$_[0]})
{
print "$_ => ${$_[0]}{$_} \\n";
}

}



вот это, кстати не работает
Название: Трабл с хэшем
Отправлено: NeoNox от 24 Ноября 2006, 17:25:58
Работает  DB<1> %h = (aaa=>1, bbb=>2, ccc=>3)

                                                                                                                               DB<2> sub get_types{for (keys %{$_[0]}){print "$_ => ${$_[0]}{$_} \\n"; }}

                                                                                                                               DB<3> get_types(\\%h)
bbb => 2
aaa => 1
ccc => 3
Название: Трабл с хэшем
Отправлено: NeoNox от 24 Ноября 2006, 17:37:04
use Data::Dumper;

%hash = ( "text" =>     {
                        type=>&get_types(\\%hash),
                        name=>"text"
                        },
          "textarea" => {
                        type=>&get_types(\\%hash),
                        name=>"textarea"
                        }
);


print Dumper(%hash);

sub get_types
{
my %get_types = %{$_[0]};
my $keys;

foreach (sort keys %get_types) {

    if($get_types{$_})
    {
        $keys .= $_
    }

}

return $keys;

}

С логикой работы программы чувствую не то что ты ожидаешь ;)