Alex: Coderef innerhalb von new() weitergeben

Beitrag lesen

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