#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $bla = Container->new(); $bla->blub("foo/bar" => "eins"); $bla->blub("foo/bla" => "zwei"); my $foo = $bla->getValue(); print Dumper $foo; package Container; sub new { my $class = shift; my $self = {}; bless $self, $class; return $self; } sub blub { my $self = shift; $self->{Hash} = {}; my %foo = @_; my @daten; foreach(keys %foo) { my @split = split "/", $_; push @daten, [ @split ]; } my $tmp_key; foreach my $data (@daten) { if(ref $data eq 'ARRAY') { $tmp_key = ""; my $count = 0; foreach(@{ $data }) { $tmp_key .= $_; $tmp_key .= "/" unless($_ eq $data->[-1]); $count++; } my $max = scalar(@{$data}); my $start = $self->{Hash}; for my $i (1 .. $max) { my $key = $data->[$i-1]; my $val = $i == $max ? $foo{$tmp_key} : { }; $start = _prepareOrSet($start, $key, $val); } } } } sub _prepareOrSet { my ($href, $key, $val) = @_; $href->{$key} = $val unless defined $href->{$key}; return $href->{$key}; } sub getValue { my $self = shift; return $self->{Hash}; }