Thread Modul um jedes Element eines Hashes zu bearbeiten (7 answers)
Opened by roooot at 2009-04-23 22:11

topeg
 2009-04-23 23:05
#120856 #120856
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
So könnte man es machen:
(Ungetestet)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my $struct={a=>[{a=>[1,2,3,4],b=>{a=>1,b=>2,d=>3}},{a=>1,b=>2},[1,2,3],[1,2]],b=>{a=>{a=>[1,2,3,4],b=>0},b=>[1,2,3,4,5,6,7]},c=>10};

sub catch
{
  my $in=shift;
  my $ref=shift;
  my $type=ref($ref);
  if($type eq 'HASH')
  {
    for my $key (keys(%$ref))
    {
      catch("$in HASH($key)->",$ref->{$key});
    }
  }
  elsif($type eq 'ARRAY')
  {
    for my $i (0..$#$ref)
    {
      catch("$in ARRAY($i)->",$ref->[$i]);
    }
  }
  else
  {
    print "$in VALUE=$ref\n";
  }
}

print Dumper($struct);
catch("",$struct);

"ref()" gibt den Typ einer Variable zurück (ARRAY, HASH, CODE, etc.)
Der Code klappert rekursiv alle Pfade, die möglich sind, durch.

View full thread Modul um jedes Element eines Hashes zu bearbeiten