1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use strict; use warnings; my %test = ( code => sub { my $input = shift; if ($input eq 'h') { return 'hallo'; } }, ); $test{code} .= 'if ($input eq \'s\') { return \'sonne\'; }'; my $foo = $test{code}->('h'); print "$foo\n"; # hallo erwartet $foo = $test{code}->('s'); print "$foo\n"; # sonne erwartet
QuoteCan't use string ("CODE(0x1d1e354)if ($input eq 's'") as a subroutine ref while "strict refs" in use at test.pl line 14.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
use strict;
use warnings;
my %test = (
code => sub {
my $input = shift;
if ($input eq 'h')
{ return 'hallo'; }
},
);
$test{code1}= sub { my $input=shift; if ($input eq 's') { return 'sonne'; } };
my $foo = $test{code}->('h');
print "$foo\n"; # hallo erwartet
$foo = $test{code1}->('s');
print "$foo\n"; # sonne erwartet
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
use 5.012; use warnings; sub catsub { my @fs = @_; sub { map { $_->(@_) } @fs } } my %test = ( code => sub { my $input = shift; say '[original]'; if ($input eq 'h') { return 'hallo'; } }, ); $test{code} = catsub( $test{code}, sub { my $input = shift; say '[erweiterung]'; if ($input eq 's') { return 'sonne'; } }, sub { say '[nix]'; (); }, ); say $test{code}->('h'); say $test{code}->('s');
1 2 3 4 5 6 7
my %test = ( lookup => { 's' => 'sonne', ... } code => sub { my $input = shift; return $test{lookup}->{$input} || 'unknown' ; } }, );
2012-07-23T10:26:49 pqich bin allerdings auch der meinung, dass es sich vermutlich um ein XY-problem handelt, wenn man sowas braucht.
2012-07-23T12:18:41 RaubtierKurz: Du fragst, wie du X machen kannst, aber eigentlich hast du Problem Y, das anders besser lösbar wäre.