Re: Trying to use Perl5 modules (documented on wiki)
Audrey Tang wrote: > > 在 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 ; > say gmtime.wday; > > Implicit imports is not yet supported, though... Thanks for the status update. I've reflected this on the related wiki page: http://rakudo.org/perl6/index.cgi?using_perl_5_embedding I welcome other tips about Perl 5 embedding to also appear there! Mark
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 ; say gmtime.wday; Implicit imports is not yet supported, though... Audrey
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 {()[ $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 = 'now and thensome 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 = 'now and thensome 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
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 {()[ $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 = 'now and thensome 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 = 'now and thensome 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) 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() ]; $ perl ./p5test.pl Tue 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 . $ pugs ./p5test.p6 *** No compatible subroutine found: "&gmtime" at ./p5test.p6 line 6, column 10-18 use strict; use Text::Balanced qw(extract_tagged); my $txt = 'now and thensome text'; my @ret_pars = extract_tagged($txt); print join("\n",@ret_pars),"\n"; print "[EMAIL PROTECTED]" if $@; $ perl ./p5test.pl now and then some text now and then use perl5:Text::Balanced qw(extract_tagged); my $txt = 'now and thensome 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. $ pugs ./p5test.p6 *** No compatible subroutine found: "&extract_tagged" at ./p5test.p6 line 5, column 16-36 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