Re: s/// w/o intermediate variables?

Shinya Hayakawa <[email protected]>
Newsgroups gmane.comp.lang.perl.fun
Organization TOKYO Programmer
Message-ID <[email protected]>
Hi,

This is not recommended but if you just try,
it might be very helpful.


use Inline C => << 'EOC';
OP *my_pp_subst(pTHX)
{
    dMARK; dAX;
    OP *op;
    SV *sv;
    STRLEN len;
    char *str;
    sv = PL_op->op_flags & OPf_STACKED ? ST(0) : DEFSV;
    op = Perl_pp_subst(aTHX);
    /* to make it to be dualvar */
    str = SvPV(sv, len);
    SvUPGRADE(ST(0), SVt_PVIV);
    sv_setpvn(ST(0), str, len);
    SvIOK_on(ST(0));
    return op;
}

void initialize()
{
    printf("hey\n");
    PL_ppaddr[OP_SUBST] = MEMBER_TO_FPTR(my_pp_subst);
}
EOC
use strict;
BEGIN { initialize() }

my $pkg = "foo::bar::baz";
require $pkg =~ s,::,/,g . '.pm';


On Wednesday 05 May 2004 12:13 am, [email protected] wrote:
>   my $package = 'Foo::Bar::Baz';
>   require TRANSFORM[ s,::,/,g, "$package.pm" ];
>   $package->foobar();
>
> where TRANSFORM[] stands for an expression in which an "s-expression"
> (i.e. one using s///) is applied to a string, and the resulting string
> is returned as the result.

-- 
SH
[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.