Re: Trying to use Perl5 modules
Where is .can documented? I saw .can in one of the examples in the pugs distribution, but I didnt know where it came from, viz., was it related to perl6 or the module that had been imported. Not quite sure how the following two statements can be consistent: 'imports from Perl5 modules dont work' and 'there is a workaround with .can'. From the code examples below, .can seems to be importing the methods from the modules. If .can is a universal workaround, then surely a pugs wrapper could be written for any perl5 module along the lines use v6-alpha; use perl5:SomeModule::SomeSubModule; our aPublicSub := SomeModule::SomeSubModule.can('aPublicSub'); and so on for all the sub's in the module. Regards, Richard Trey Harris wrote: In a message dated Mon, 11 Sep 2006, Richard Hainsworth writes: I am trying to find out how to use (in perl6) perl5 modules that contain subroutines. Imports from Perl 5 modules don't currently work. You can workaround this using .can, see below. use perl5:Time::gmtime; my $gm = gmtime(); printf The day in Greenwich is %s\n, (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ $gm.wday() ]; # note the change from - to . use v6-alpha; use perl5:Time::gmtime; our gmtime := Time::gmtime.can('gmtime'); my $gm = gmtime(); say The day in Greenwich is {(Sun Mon Tue Wed Thu Fri Sat Sun)[ $gm.wday ] }; There is no printf. You can use a string closure as above, or say/print with sprintf. The same goes for your other example: use perl5:Text::Balanced qw(extract_tagged); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); # this is line 8 print join(\n,@ret_pars),\n; #print [EMAIL PROTECTED] if $@; # commented this out as caused a compile error, probably another # variable should be used for errors. use perl5:Text::Balanced; our extract_tagged := Text::Balanced.can('extract_tagged'); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); # this is line 8 .say for @ret_pars; say $! if $!; $@ is no more, it's $! for all errors whatever their provender. In this case there's no need for a join, but you could have written it: say @ret_pars.join(\n); if you liked. All that said, there's a problem with Text::Balanced running under pugs; @ret_pars is reversed from what it should be. I'm not sure what's going on. Trey
Re: Trying to use Perl5 modules
在 Sep 11, 2006 2:07 PM 時,Trey Harris 寫到: In a message dated Mon, 11 Sep 2006, Richard Hainsworth writes: I am trying to find out how to use (in perl6) perl5 modules that contain subroutines. Imports from Perl 5 modules don't currently work. Actually, explicit imports do work (as of a couple weeks ago): use perl5:Time::gmtime gmtime; say gmtime.wday; Implicit imports is not yet supported, though... Audrey
Re: Trying to use Perl5 modules
In a message dated Mon, 11 Sep 2006, Richard Hainsworth writes: I am trying to find out how to use (in perl6) perl5 modules that contain subroutines. Imports from Perl 5 modules don't currently work. You can workaround this using .can, see below. use perl5:Time::gmtime; my $gm = gmtime(); printf The day in Greenwich is %s\n, (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ $gm.wday() ]; # note the change from - to . use v6-alpha; use perl5:Time::gmtime; our gmtime := Time::gmtime.can('gmtime'); my $gm = gmtime(); say The day in Greenwich is {(Sun Mon Tue Wed Thu Fri Sat Sun)[ $gm.wday ] }; There is no printf. You can use a string closure as above, or say/print with sprintf. The same goes for your other example: use perl5:Text::Balanced qw(extract_tagged); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); # this is line 8 print join(\n,@ret_pars),\n; #print [EMAIL PROTECTED] if $@; # commented this out as caused a compile error, probably another # variable should be used for errors. use perl5:Text::Balanced; our extract_tagged := Text::Balanced.can('extract_tagged'); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); # this is line 8 .say for @ret_pars; say $! if $!; $@ is no more, it's $! for all errors whatever their provender. In this case there's no need for a join, but you could have written it: say @ret_pars.join(\n); if you liked. All that said, there's a problem with Text::Balanced running under pugs; @ret_pars is reversed from what it should be. I'm not sure what's going on. Trey
Trying to use Perl5 modules
I am trying to find out how to use (in perl6) perl5 modules that contain subroutines. Here are two scripts from standard modules. Both work in perl5, but I cant find a way to use them using pugs (I am using the Debian package with version 6.2.10-4build1 on GNU/Linux/Ubuntu) start of perl5 script - straight out of the Time::gmtime documentation use strict; use Time::gmtime; my $gm = gmtime(); printf The day in Greenwich is %s\n, (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ $gm-wday() ]; end of script terminal output, under linux $ perl ./p5test.pl Tue start of perl6 script use perl5:Time::gmtime; my $gm = gmtime(); printf The day in Greenwich is %s\n, (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ $gm.wday() ]; # note the change from - to . end of script terminal output $ pugs ./p5test.p6 *** No compatible subroutine found: gmtime at ./p5test.p6 line 6, column 10-18 second example perl5 script use strict; use Text::Balanced qw(extract_tagged); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); print join(\n,@ret_pars),\n; print [EMAIL PROTECTED] if $@; end script terminal output $ perl ./p5test.pl atagnow and then/atag some text atag now and then /atag perl6 script use perl5:Text::Balanced qw(extract_tagged); my $txt = 'atagnow and then/atagsome text'; my @ret_pars = extract_tagged($txt); # this is line 8 print join(\n,@ret_pars),\n; #print [EMAIL PROTECTED] if $@; # commented this out as caused a compile error, probably another # variable should be used for errors. terminal output $ pugs ./p5test.p6 *** No compatible subroutine found: extract_tagged at ./p5test.p6 line 5, column 16-36 terminal output end What is going wrong? What have I done wrong? I tried several alternatives, like putting the sigil on the function. I just got different sorts of errors. Richard