hier mal die 3 dateien, die auch funktionieren:
__DATEI__
package ModulA;
use strict;
use warnings;
use List::MoreUtils qw(uniq part);
sub new {
my ( $self ) = @_;
return bless( {}, $self );
}
{
my @Menu;
my $Menu_Funs;
sub get_Menu_Fun {
my ( $self ) = @_;
return $Menu_Funs;
}
sub add_Menu {
my ( $self, $code_ref, $menu ) = @_;
# create an array with splitted ([subitems], [items])
my @menu_items = part { !ref( $_ ) } @$menu;
# only the last part is of further interest
@menu_items = @{ $menu_items[1] };
# add the menu function for all items
@$Menu_Funs{ @menu_items } = ( $code_ref ) x scalar( @menu_items );
# bug or feature: mod_perl caches objects
# so we need to take care that items do not double
push @Menu, @$menu unless grep { /^$$menu[0]$/ } @Menu;
return @Menu;
}
}
1;
__DATEI__
package Modul1;
use strict;
use warnings;
sub new {
my ( $self, $ModulA ) = @_;
my %config;
$config{ ModulA } = $ModulA;
my $self = bless( %config, $self );
$ModulA->add_Menu( $self, [ "item1", "item2" ] );
return $self;
}
1;
__DATEI__
#!/usr/bin/perl
use 5.8.0;
use strict;
use warnings;
use CGI qw( :standard );
use Data::Dumper;
use lib "$ENV{ DOCUMENT_ROOT }/cgi-perl/modules/";
use ModulA;
use Modul1;
my $ModulA = ModulA->new();
my $Modul1 = Modul1->new( $ModulA );
print header();
print start_html();
print pre( Dumper( $ModulA->get_Menu_Fun() ));
print end_html();
1;
diese abgemagerte version tut was ich will. aber im gesamten projekt muss irgendwo noch was heimtückisches sein, werd ich wohl allein mühsam rausfinden müssen.
trotzdem danke.
alex