From: "Airman" <[EMAIL PROTECTED]> > Is there any special way to do row/col (two dimensional) based > associative arrays? > > Something like: > > $array{1.1}="line one column one"; > $array{1.2}="line one column two"; > > or > > @names(Bob,John,Jeff); > @info=(Age,Zip,Phone); > > $data{Bob.Age}=23; > > foreach $entry (@names) { > print "$data{$entry.Age}\n"; > } > > I guess in perl code maybe this would work???
There are actually three ways. Either you could have a hash of hashes: $array{Bob}{Age} = 23; or you could use an ordinary hash and use some separator between the key and subkey. $array{"Bob|Age"} = 23; or (which is actually the same thing as solution 2 use a comma: $array{Bob,Age} = 23; this last option is equivalent to $array{"Bob".$;."Age"} = 23; and $; is set to some character that's very unlikely to appear in your text. Which of the options to use is up to you, the 2nd and 3rd should be a little less memory consuming, but it will be hard (and slow) to display eg. everything you know about Bob. In the first case it'd be foreach my $key (keys %{$array{Bob}}) { print "$key => $array{Bob}{$key}\n" } while in the third you'd have to loop over the whole hash with something like: foreach my $key (keys %array) { next unless $key =~ /^Bob$;(.*)$/; print "$1 => $array{$key}\n"; } HTH, Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]