Leser: 1
10 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/perl use strict; use warnings; { package MyTest; sub new { print "(new) erlaubt\n"; print "rufe test() auf\n"; test(); print "test() wurde aufgerufen\n"; } sub test { my @info = caller(0); if( $info[0] ne __PACKAGE__ ) { print "(test) nicht erlaubt: Aufruf aus Package $info[0]\n"; } else{ print "(test) erlaubt\n"; } } } package main; print "rufe new() aus main auf\n"; MyTest->new; print "rufe test() aus main auf\n"; MyTest->test;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/perl use strict; use warnings; { package MyTest; my $test; sub new { $test->(); } $test = sub { print "(test) erlaubt\n"; } } package main; MyTest->new;
renee+2008-05-27 13:45:41--Soll nur aus dem Package heraus die Subroutinen zugegriffen werden?
Zur Not kann man es so machen:Code (perl): (dl )1 2 3if( $info[0] ne __PACKAGE__ ) { print "(test) nicht erlaubt: Aufruf aus Package $info[0]\n"; }
renee+2008-05-27 13:45:41--[...] Da $test eine lexikalische Variable ist, kann man nicht "von außen" zugreifen.
renee+2008-05-27 13:45:41--Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17#!/usr/bin/perl use strict; use warnings; { sub test { my @info = caller(0); if( $info[0] ne __PACKAGE__ ) { print "(test) nicht erlaubt: Aufruf aus Package $info[0]\n"; } else{ print "(test) erlaubt\n"; } } }
moritz+2008-05-28 10:52:29--Das hat auch das kleine Problem, dass man Vererbung verhindert. Das kann gewünscht sein, muss aber nicht.
10 Einträge, 1 Seite |