Anzeige:
Ergebnis 1 bis 4 von 4

Thema: [Perl] Can't use string as a subroutine

  1. #1
    Registrierter Benutzer Avatar von Rebell
    Registriert seit
    10.07.2002
    Ort
    Dresden
    Beiträge
    62

    [Perl] Can't use string as a subroutine [gelöst]

    Zitat Zitat von Fehlermeldung
    Can't use string ("bp_lib") as a subroutine ref while "strict refs" in use at test.pl line 10.
    Code:
    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?
    Geändert von Rebell (23-08-2006 um 19:30 Uhr) Grund: gelöst
    to be famous is so nice
    http://get-mike.de
    M:ke

  2. #2
    Registrierter Benutzer Avatar von Rebell
    Registriert seit
    10.07.2002
    Ort
    Dresden
    Beiträge
    62
    Noch ein Beispiel, aus einer Klasse herraus aufgerufen. Mit Namen funktionierts, aber nicht unter Verwendung einer Variable wie hier.
    Code:
    # Funktioniert nicht
    my $func_name = "bp_lib";
    main::$func_name($sig, $this);
    
    # Funktioniert
    main::bp_lib($sig, $this);
    to be famous is so nice
    http://get-mike.de
    M:ke

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    HI,

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

    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    ...
    no strict 'refs';
    &$var();
    
    #oder besser:
    $var->();

  4. #4
    Registrierter Benutzer Avatar von Rebell
    Registriert seit
    10.07.2002
    Ort
    Dresden
    Beiträge
    62
    ICh habs mit Eval gemacht:
    Code:
    eval("main::" . $func_name . "(\$sig, \$this)");
    to be famous is so nice
    http://get-mike.de
    M:ke

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •