PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] Can't use string as a subroutine



Rebell
22-08-2006, 16:38
Can't use string ("bp_lib") as a subroutine ref while "strict refs" in use at test.pl line 10.




use strict;
my $var = "bp_lib";
&$var();

sub bp_lib {
my $sig = shift;
my $template = shift;
require $sig->get_option("path");
}


Wie behebe ich das Problem, gibt es eine elegantere Lösung?

Rebell
22-08-2006, 16:54
Noch ein Beispiel, aus einer Klasse herraus aufgerufen. Mit Namen funktionierts, aber nicht unter Verwendung einer Variable wie hier.


# Funktioniert nicht
my $func_name = "bp_lib";
main::$func_name($sig, $this);

# Funktioniert
main::bp_lib($sig, $this);

michael.sprick
23-08-2006, 09:29
HI,

da macht Dir das 'use strict;' einen Strich durch die Rechnung...
Du kannst das umgehen, indem Du vor dem Funktionsrauf folgendes schreibst:



#!/usr/bin/perl

use strict;
use warnings;

...
no strict 'refs';
&$var();

#oder besser:
$var->();

Rebell
23-08-2006, 19:29
ICh habs mit Eval gemacht:


eval("main::" . $func_name . "(\$sig, \$this)");