<?php
$arr= array();
$arr["super"]=array(1,2,3);
print $arr["super"];
?>
Perl, массив в хеше
Иными словами, мне нужно сделать то, что на php делается следующим образом:
Код:
Вот. Наивно пробовал %arr = ("super"=>(1,2,3)); и %arr = ("super", (1,2,3)), результат очевиден. ЧЯДНТ?
%arr = ("super"=>[1,2,3] .....);
И обращаться вот так: @{$arr{"super"}}
Код:
%arr = ('key1'=>[1,2,3], 'key2'=>[4,5,6]);
$arr{'key1'}->[0]
$arr{'key1'}->[0]
к первому элементу в key1
Еще вопрос:
Файл 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";
}
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";}
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", хотя регулярки одинаковые. В чем проблема может быть, не подскажете?
так выведи $type и увидишь
Кстати, по поводу вывода:
Код:
print "\n(".$type.")\n";
выводит:
Код:
)ctf
Вместо сами понимаете чего(во втором файле), в первом все нормально.
Еще вопрос: есть ли какой-то способ обходить все массивы(все элементы массивов) в хеше?
2. Циклом в цикле я полагаю
Наугад нащупал интересное решение:
Код:
foreach $variable(@{$array{"key_one"}}, @{$array{"key_two"}}, ...){}
Цитата: motorw
phodopus, в выводе $response все нормально.
ложки нет. И мистики тоже не бывает.
Да я понимаю, что мистики быть не может. Но почему все посты тримить приходится, чтобы верно выцепить информацию :(