Pierwszy przyklad robi dokladnie to co podalas ze ma robic. Drugi tak samo...
Jesli chcesz zlapac dopasowany tekst to musisz zrobic zlapac go w nawiasach i bedzie wtedy wpisany do zmiennej $1, $2, itd... poza tym regex masz w postaci .* czyli dopasuj od pierwszego pasujacego znaku do konca linii, wiec nie masz szans zlapac pozostalych wartosci w ten sposob - muisz uzyc .*? i podac dalej jeszcze jeden znak ktory jest ograniczeniem ciagu dopasowujacego.
Proste rozwiazanie uzywajace malej sztuczki - jesli przypisujesz tablice do hash'a do masz takie cos:
Kod:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @tab = ('k1','v1','k2','v2');
my %hash = @tab;
print Dumper \%hash;
... zwraca ...
Kod:
$VAR1 = {
'k2' => 'v2',
'k1' => 'v1'
};
Jelsi wiec biorac Twoj tekst dopasujemy nazwe zmiennej i jej wartosc i wpiszemy jako kolejne elementy tablicy na zasadzie jak wyzej, to pozniej mozemy to przepisac na hash i miec latwy dostep do zmiennych.
Kod:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @dane;
while (<DATA>) {
my @tmp = m/\s+(\S+)="(.*?)"\s+/mg;
push @dane, @tmp;
}
my %uczen = @dane;
print Dumper \%uczen;
__DATA__
<UCZEN nazwisko="LLL" nazwisko_rodowe="" imie="Dominik" imie2="Marcin" plec="męska" data_ur="1999-01-10" msc_ur="Bydgoszcz" msc_ur_m="Bydgoszczy" woj_ur="KUJAWSKO-POMORSKIE" kraj_ur="Polska" pesel="111"
<ADRES_U ktg="" miejscowosc="Torun" msc_m="Torun" ulica="R" nr_domu="1" nr_lok="4" kod="85-000" poczta="Torun" gmina="Torun" powiat="Bydgoszcz" woj="KUJAWSKO-POMORSKIE" kraj="Polska" e_mail="" />
zwraca
Kod:
$VAR1 = {
'e_mail' => '',
'plec' => 'męska',
'gmina' => 'Torun',
'msc_m' => 'Torun',
'kod' => '85-000',
'nr_domu' => '1',
'nazwisko' => 'LLL',
'imie' => 'Dominik',
'msc_ur' => 'Bydgoszcz',
'woj' => 'KUJAWSKO-POMORSKIE',
'woj_ur' => 'KUJAWSKO-POMORSKIE',
'pesel' => '111',
'ktg' => ''
};
Pamietaj tylko ze podalas urwane linie w przyjladzie