Stefan Welscher: Teil eines komplexen Hashes referenziert heraustrennen

Beitrag lesen

Moin moin,
die Überschrift ist evtl. etwas verwirrend.
Was ich habe ist ein Hash mit mehreren Levels:

z.B.

my %I;
$I{'level1'}{'level2'}{'level3'}{'value1'}=1;
$I{'level1'}{'level2'}{'level3'}{'value2'}=2;
$I{'level1'}{'level2'}{'level3'}{'value3'}=3;
$I{'level1'}{'level2'}{'level3'}{'value4'}=4;
$I{'level1'}{'level2'}{'level3'}{'level4'}{'value1'}=5;
$I{'level1'}{'level2'}{'level3'}{'level4'}{'value2'}=6;
$I{'level1'}{'level2'}{'level3'}{'level4'}{'level5'}{'value1'}=7;
$I{'level1'}{'level2'}{'level3'}{'level4'}{'level5'}{'value2'}=8;
$I{'level1'}{'level2'}{'level3'}{'value5'}=9;

Das "Master-Hash" kann dabei nahezu unendlich viele Ebenen haben, bzw. lässt sich die Anzahl der Ebenen zumindest nicht vorhersehen.
Jetzt möchte ich z.B. alles ab Level3 in einem anderen Hash referenzieren.

So funzt es nicht, weil hier dereferenziert wird:

my %I_level3=%{$I{'level1'}{'level2'}{'level3'}};

Hier das gleiche:

my $I_ref=%{$I{'level1'}{'level2'}{'level3'}};
my %I_level3=%{$I_ref};

Ich könnte zwar mit $I2->{...} die Referenz nutzen, müsste aber eben bei jeder Verwendung des Teilhashes den Pfeil mit verwenden.
Ist es nicht irgendwie möglich, dass die Referenz "unsichtbar" bleibt und ich eben nicht 11000 Zeilen Quelltext umschreiben muss?

Beispiel:

  
#/usr/bin/perl  
  
use strict;  
  
  
my %I;  
$I{'level1'}{'level2'}{'level3'}{'value1'}=1;  
$I{'level1'}{'level2'}{'level3'}{'value2'}=2;  
$I{'level1'}{'level2'}{'level3'}{'value3'}=3;  
$I{'level1'}{'level2'}{'level3'}{'value4'}=4;  
$I{'level1'}{'level2'}{'level3'}{'level4'}{'value1'}=5;  
$I{'level1'}{'level2'}{'level3'}{'level4'}{'value2'}=6;  
$I{'level1'}{'level2'}{'level3'}{'level4'}{'level5'}{'value1'}=7;  
$I{'level1'}{'level2'}{'level3'}{'level4'}{'level5'}{'value2'}=8;  
$I{'level1'}{'level2'}{'level3'}{'value5'}=9;  
  
my %I_level3=%{$I{'level1'}{'level2'}{'level3'}};  
  
print "\nDEBUG:SOURCE_HASH:".$I{'level1'}{'level2'}{'level3'}{'value1'};  
print "\nDEBUG:DESTINATION_HASH:".$I_level3{'value1'}."\n";  
  
$I_level3{'value1'}=2;  
  
print "\nDEBUG:SOURCE_HASH:".$I{'level1'}{'level2'}{'level3'}{'value1'};  
print "\nDEBUG:DESTINATION_HASH:".$I_level3{'value1'}."\n";  

Besten Dank schonmal!