Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Perl, массив в хеше

9.1K
19 сентября 2011 года
motorw
134 / / 15.12.2009
Всем привет. Необходимо засунуть в хеш массив.

Иными словами, мне нужно сделать то, что на php делается следующим образом:
 
Код:
<?php
$arr= array();
$arr["super"]=array(1,2,3);
print $arr["super"];
?>

Вот. Наивно пробовал %arr = ("super"=>(1,2,3)); и %arr = ("super", (1,2,3)), результат очевиден. ЧЯДНТ?
9.1K
19 сентября 2011 года
motorw
134 / / 15.12.2009
Как всегда, в этом языке подарок на подарке. Оказывается, нужно писать так:
%arr = ("super"=>[1,2,3] .....);
9.1K
19 сентября 2011 года
motorw
134 / / 15.12.2009
И обращаться вот так: @{$arr{"super"}}
75K
20 сентября 2011 года
Ohlob
1 / / 20.09.2011
можно и так:

 
Код:
%arr = ('key1'=>[1,2,3], 'key2'=>[4,5,6]);
$arr{'key1'}->[0]

к первому элементу в key1
9.1K
20 сентября 2011 года
motorw
134 / / 15.12.2009
А в foreach мне их как перебирать?

Еще вопрос:
Файл test.pl
 
Код:
$text=":nick!~usenrame\@ip PRIVMSG $channel :!add ca2v2";

my ($nick, $username, $host, $chan,$type) = $text=~ /\:(.*)\!(.*)@(.*) PRIVMSG(.*):!add (.*)/i;
   
if($type=~ /^(ctf|tdm|ca|ca2v2|tdm2v2)$/i) #или я здесь пишу: if($type eq "ctf" || $type ...)
{
  print "ravno\r\n";
}

Файл bot.pl
 
Код:
$response=<$server>;   $server = socket
if($response =~ /PRIVMSG $channel :!add (.*)/i)  
  {
    my ($nick, $username, $host, $chan,$type) = $response=~ /\:(.*)\!(.*)@(.*) PRIVMSG(.*):!add (.*)/i;
    if($type =~ /^ctf$/) # или по аналогии выше
    {print "ravno";}else{print "ne ravno";}

В итоге, последний файл выводит "ne ravno", хотя регулярки одинаковые. В чем проблема может быть, не подскажете?
14
21 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
так выведи $type и увидишь
9.1K
22 сентября 2011 года
motorw
134 / / 15.12.2009
Смешно:) Везде одинаковый(во всех файлах, а if не проходит) - магия.

Кстати, по поводу вывода:
 
Код:
print "\n(".$type.")\n";

выводит:
 
Код:
)ctf

Вместо сами понимаете чего(во втором файле), в первом все нормально.
9.1K
22 сентября 2011 года
motorw
134 / / 15.12.2009
Сделал trim, сработало во втором файле. Только непонятно, откуда там пробелы и почему такой кривой вывод получался. Может кто объяснить? Я видел такое только вследствие "мусора", но откуда мусор в perle?

Еще вопрос: есть ли какой-то способ обходить все массивы(все элементы массивов) в хеше?
14
23 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
1. Сделать вывод $response и посмотреть
2. Циклом в цикле я полагаю
9.1K
23 сентября 2011 года
motorw
134 / / 15.12.2009
phodopus, в выводе $response все нормально. Да и что там может быть ненормально, если эти сообщения посылает сервер IRC, а не какой-то там?

Наугад нащупал интересное решение:
 
Код:
foreach $variable(@{$array{"key_one"}}, @{$array{"key_two"}}, ...){}
14
24 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: motorw
phodopus, в выводе $response все нормально.


ложки нет. И мистики тоже не бывает.

9.1K
24 сентября 2011 года
motorw
134 / / 15.12.2009
:D
Да я понимаю, что мистики быть не может. Но почему все посты тримить приходится, чтобы верно выцепить информацию :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог