To nie blad w rozumowaniu :-)
Kod wyglada ok ale nie dziala. Moge jedynie zgadywac, ze chodzi o to, ze odkladasz do @date referencje do globalnej zmiennej @d, globalnej i deklarowanej wewnatrz petli... jak teraz przepiszesz wartosc zmiennej wczytujac nastepny wiersz, to zmieniasz to co juz odlozylas do @date :-)
Piszac w perlu warto dodac dwa moduly, strict i warnings. Strict nie pozwoli na takie luzne deklarowanie zmiennych, trzeba je zadeklarowac uzywajac my, our albo local. Generalnie pomaga to w sledzeniu zasiegu zmiennych i znajdywaniu literowek w kodzie, bo program od razu poda ze uzywasz nieznanej zmiennej. Uzycie warnings dodatkowo daje informacje o tym, ze np zmienna ktorej uzywasz jest undef, czyli logika skryptu bedzie wariowac bo szukasz wartosci aby wstawic do zmiennej, wszystko wyglada dobrze a skrypt nie dziala... bo zmienna jest undef bo albo dane byly nieprawidlowe albo regex zle zapisany albo cos innego. Warnings ostrzega tez, jesli w ramach jednego bloku {} ponownie deklarujesz zmienna o tej samej nazwie.
Ogolnie aby pisac w Perlu i nie popelniac bledow warto od poczatku zapamietac:
Kod:
use strict;
use warnings;
Kazdy moj skrypt od tego sie zaczyna, no chyba ze jest to 1-linijkowiec odpalany prosto z wiersza polecen :-) W kazdym innym wypadku mam te dwa moduly.
Poprawiona wersja kodu wyglada tak:
Kod:
#!usr/bin/perl
use Data::Dumper;
use strict;
use warnings;
my @date;
open (K, 'plik.txt');
while (<K>) {
chomp;
my @d = split(/,/);
push @date,\@d;
}
close(K);
print Dumper \@date;
a wynik dzialania taki:
Kod:
$VAR1 = [
[
'12',
'34',
'56'
],
[
'23',
'4',
'5'
],
[
'12',
'3',
'4'
],
[
'123',
'1',
'1'
]
];