Thread Funktionen erweitern: Funktionsname aus Referenz? (5 answers)
Opened by Ronnie at 2006-11-25 18:31

Ronnie
 2006-11-25 18:31
#72003 #72003
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Nach den tollen Antworten und Anregungen zu meinem 'eval is evil'-Thread, habe ich nun eine neue Problemstellung. Ich habe überlegt wie man Funktionen nachträglich z.B. eine Validierung der Argumente aufzwingen kann. Das folgende Beispiel macht genau das, nur habe ich den Namen der übergebenen Funktion 'hart' eingebaut. Kann ich aus der Referenz auf die Funktion an deren Namen kommen? Oder verfolge ich einen falschen Ansatz?
Code: (dl )
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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

sub foo {
return "foo:\t" . $_[0];
}

sub contract_on {
my $func = shift;

my $sub = sub {
my $i = shift;
warn "need an integer!" unless ($i =~ /\d+/);
return $func->($i);
};

no strict 'refs';
no warnings;
*{'foo'} = $sub; # woher bekommt man den Namen der Funktion?
}


print foo('X') . "\n";
contract_on \&foo;
print foo('X') . "\n";

View full thread Funktionen erweitern: Funktionsname aus Referenz?