sub foo { my ( $type ) = @_; my %data = ( type1 => { dir => 'a', text1 => 'text-a1', text2 => 'text-a2' }, type2 => { dir => 'b', text1 => 'text-b1', text2 => 'text-b2' }, ... type9 => { dir => 'i', text1 => 'text-i1', text2 => 'text-i2' } ); # do stuff with $data{$type}{dir|text1|text2} my $barresult = bar( $type ); my $bazresult = baz( $type ); } sub bar { my ( $type ) = @_; my %data = ( type1 => { url => 'a', regex => '\d\d(\d\d)(\d\d)(\d\d)' }, type2 => { url => 'b', regex => '(\d\d)(\d\d)(\d\d)' }, ... type9 => { url => 'i', regex => '\.(\d{8})\.' } ); # do stuff with $data{$type}{url} and $data{$type}{regex} } sub baz { # similar to &bar }