Here's one way of doing it that stores the data as a hash of hashes:
When parsing files, it's a good idea to detect and report errors. A few of your sample lines, for example, had opening and closing tags that didn't match. I fixed them in my example data, but only after the error-reporting code caught them.#!/usr/bin/perl use warnings; use strict; my %user_data; my $current_user; while (<DATA>) { if (my ($elem, $content) = m|^ <([^>]+)> (.*) </\1> |x) { $current_user = $content if $elem eq "UserID"; $user_data{$current_user}{$elem} = $content; } else { print "Bad line $.: $_"; } } use Data::Dumper; print Dumper(\%user_data); # $VAR1 = { # '98766' => { # 'var6' => 'some string', # 'var1' => 'some string', # 'dev' => 'Some Text', # 'UserID' => '98766', # 'var2' => 'some string', # 'var5' => 'some string', # 'start' => '2004-10-21TO09:57:25Z' # }, # '57864' => { # 'var6' => 'some string', # 'var1' => 'some string', # 'dev' => 'Some Text', # 'var4' => 'some string', # 'UserID' => '57864', # 'start' => '2004-10-25TO09:57:25Z' # }, # '46786' => { # 'var3' => 'some string', # 'var1' => 'some string', # 'dev' => 'Some Text', # 'var4' => 'some string', # 'UserID' => '46786', # 'var2' => 'some string', # 'start' => '2004-10-21TO09:57:25Z' # } # }; __DATA__ <UserID>46786</UserID> <start>2004-10-21TO09:57:25Z</start> <dev>Some Text</dev> <var1>some string</var1> <var2>some string</var2> <UserID>57864</UserID> <start>2004-10-25TO09:57:25Z</start> <dev>Some Text</dev> <var1>some string</var1> <UserID>46786</UserID> <var3>some string</var3> <var4>some string</var4> <UserID>98766</UserID> <start>2004-10-21TO09:57:25Z</start> <dev>Some Text</dev> <var1>some string</var1> <var2>some string</var2> <var5>some string</var5> <var6>some string</var6> <UserID>57864</UserID> <var4>some string</var4> <var6>some string</var6>
Cheers,
Tom
Tom Moertel : Blog / Talks / CPAN / LectroTest / PXSL / Coffee / Movie Rating Decoder
In reply to Re: Help:getting parts of the strings from a file into managable variables
by tmoertel
in thread Help:getting parts of the strings from a file into managable variables
by my_perl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |