вопрос про перл

zakysj50

$m=5;
$line$m[0]=10;
print "$line5[0]"; #ответ 10
или
$line1[0]=1;$line2[0]=2;$line3[0]=3;$line4[0]=4;
for ($m = 2; $m <5; ++$m) {print "$line$m[0],");} #ответ 2,3,4,
по понятным причинам такие строчки работать не будут.
Как сделать это правильно?

Geddi-S

Тебе что нужно-то?
Что-то типа двухмерного массива?
Как вариант, сделай массив, элементами которого будут ссылки на массивы.

zakysj50

ага, нужен двухмерный массив.
a b c
d e f
g h i
$col1[0]=a
$col1[1]=b
$col1[2]=c
$col2[0]=d
$col2[1]=e
$col2[2]=f
мне нужно распознать элементы в каждой строчке и поместить их в массив, при этом нужно, чтобы можно было обращаться к конкретному массиву по номеру строки.

kruzer25

Ппц, и после этого кто- то говорит, что круче перла только яйца, а пхп сосёт

zakysj50

можно использовать хеш-массив (номер строки, массив данных строки) ?

Geddi-S

Ппц, и после этого кто- то говорит, что круче перла только яйца, а пхп сосёт
фтопку тебя. чел просто не знает, как это сделать.
А сделать это можно так:

open my $fh, "file.name" || die "Can't open file";
my @dvum_array;
while (<$fh>) {
my @tmp_array = split (" ", $_);
push (@dvum_array, \@tmp_array);
}

(это если у тебя величины в строке разделены пробелом. Если нет - заменяй нужным параметром в сплите, в более тяжелых случаях юзай регулярные выражения)
Обращение к строке $m и элементу в ней $n:

$dvum_array[$m-1]->[$n-1];

Вот, в принципе, и все. Вроде, должно работать.

buka

-> между [] не обязательно
как и while
my @dvum_array = map {[split]} <$fh>;
EDIT: in ur face, пхпшники!

alexkravchuk

Всё равно через зад. Я perl'ом не владею, но лично из-за подобных штучек изучать его нет никакого желания. Вот мой способ эмулирования массивов, согласен, что ещё кривее

$line_0_0="[0;0]";
$line_0_1="[0;1]";
$line_1_0="[1;0]";
$line_1_1="[1;1]";
$line_2_0="[2;0]";
$line_2_1="[2;1]";

for($a=0; $a<3; $a++)
{
for($b=0; $b<2;$b++)
{
$tt="line"."_$a"."_$b";
print "$$tt";
}
}

print"\n";

Хотел сначала использовать конструкции вроде
$tt="line1[0]";
print "$$tt";
Но только ведь не работает, как-то некорректно разбирается из-за [0]. А ещё достаёт, что не могу использовать конструкции вроде
for($a=0; $a<3; $a++)
for($b=0; $b<2;$b++)
print "[$a;$b]";
Типа нужно доставить комплект (или два) фигурных скобок. В php реализовано всё как в C/C++, без лишних сложностей. И ведь могу спорить, что если я подобную критику закину на какой-нибудь перловский форум, то на меня накинутся со словами, что я лох и ламер, и на самом деле так, как в перле, правильнее. Нет, у php много проблемных мест есть, но perl...

buka

ы?
двумерный массив как массив массивов — эмуляция? нет уж, это, пожалуй, все же реализация

Geddi-S

я лох и ламер
не, чувак, ты - извращенец! =)
И, кстати, приведенный тобой код лично у меня не работает так как надо (5.6.2).
Точнее - ваще ничего не пишет.
Не нравиццо "$$var";

Marinavo_0507

тебе ж сказали, массив ссылок, и будет по аналогии с C

ava3443

$$tt
если не изменяет память, с use strict это не будет работать, следовательно фтопку

Marinavo_0507

ну сколько можно, а?

$a[$i][$j]

— работает

Elina74

а ещо
$a->{$i}->{$j}
если я ничего не забыл, работает

wwoland

блин,да в перле почти все работает =)

Geddi-S

а ещо
$a->{$i}->{$j}
если я ничего не забыл, работает
ага, только это не синоним

$a[$i][$j]

сразу по двум пунктам

ava3443

ну сколько можно, а?
это было мне?
тогда не понял, как твой ответ связан с мои комментарием.

Marinavo_0507

связь такая, что обсуждать черезжопные способы смысла мало, если при этом не показать нормальный, который вполне себе существует
Оставить комментарий
Имя или ник:
Комментарий: