2016-05-18 11 views
7

Come caricare un modulo stile OO in modo dinamico?Perl6: come caricare dinamicamente un modulo di classe?

#!/usr/bin/env perl6 
use v6; 

my $r = prompt ':'; 

if $r { 
    require Text::CSV;   # Error: 
    my $csv = Text::CSV.new; # Could not find symbol '&CSV' 
} else { 
    require File::Temp <&tempfile>; 
    my ($filename , $filehandle) = tempfile; # this works 
} 

risposta

9

Come spiegato nel perl6 doco here, è possibile caricare dinamicamente il modulo, ma;

Per importare i simboli è necessario definirli in fase di compilazione.

Quindi, il codice nella clausola else funziona a causa della richiesta esplicita di importare <&tempfile>.

La cosa più vicina ad ottenere il codice nella clausola if al lavoro che posso vedere è questo (che è in gran parte preso da quello di riferimento doco in precedenza):

use v6.c ; 

sub load-a-module($name) { 
    require ::($name) ; 
    my $instance = ::($name).new() ; 
    return $instance ; 
} 

my $module = "Text::CSV" ; 
my $csv = load-a-module $module ; 
say $csv.WHAT ; 
# say $csv.^methods ; # if you really want to be convinced 

# outputs: (CSV) 
Problemi correlati