Perl6:如何动态加载类模块?

时间:2016-05-18 08:02:16

标签: oop module perl6

如何动态加载OO风格的模块?

#!/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
}

1 个答案:

答案 0 :(得分:9)

如perl6 doco here中所述,您可以动态加载模块,但是;

  

要导入符号,必须在编译时定义它们。

因此,else子句中的代码因导入<&tempfile>的显式请求而起作用。

使if子句中的代码最接近我能看到的是这个(主要取自早期的doco引用):

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)