perl-embperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Beau E. Cox" <b...@beaucox.com>
Subject Re: Modify $0 in Perl embedded in C
Date Thu, 27 May 2004 00:15:00 GMT
On Wednesday 26 May 2004 11:41 am, JupiterHost.Net wrote:
> Hello group!
>
> I hope I have the right list (I looked and looked and couldn't
> find any specific lists) if not just point me int he right direction
>
> I've been playing with embedding Perl code into a C program that can
> interpret the code.
>   (as per http://www-h.eng.cam.ac.uk/help/mjg17/perldoc/pod/perlembed.html
> http://search.cpan.org/~krishpl/pod2texi-0.1/perlembed.pod
> http://search.cpan.org/~nwclark/perl-5.8.4/pod/perlembed.pod
> )
>
> This example works great: (I realize @ARGV is clobbered but that isn't
> the point right now, its for another sleepless night ;p)
>
>    (compiled with: gcc -o compiled_version simple.c `perl
> -MExtUtils::Embed -e ccopts -e ldopts`)
>
> #include <EXTERN.h>
> #include <perl.h>
>
> static PerlInterpreter *my_perl;
>
> main (int argc, char **argv, char **env)
> {
>          char *embedding[] = { "", "-e", "0" };
>          my_perl = perl_alloc();
>          perl_construct(my_perl);
>          perl_parse(my_perl, NULL, 3, embedding, NULL);
>          perl_run(my_perl);
>          perl_eval_pv("print qq(Hello World - I come from the planet
> C and i am -$0-\n);", TRUE);
>          perl_destruct(my_perl);
>          perl_free(my_perl);
> }
>
> But the problem I've found is:
>   1) $0 is -e since we're not making just another copy of perl but
> running internal code internally by specifying -e
>     1.a) If I change -e to the file name (IE C's argv[0]), it errors out
> because it tries to open the file to execute as perl code like doing
> perl file.pl
>     1.b) If i try to set $0 myself I get a bus error (Try it :add $0 =
> 'actual_file.name';) Which, while a bad idea generally, still works with
> regular Perl.
>     1.c) The same applies if I use the entire package name $main::0
> instead of $0 after i use caller(0 to verify we're still in main...
>
> #include <EXTERN.h>
> #include <perl.h>
>
> static PerlInterpreter *my_perl;
>
> main (int argc, char **argv, char **env)
> {
>          char *embedding[] = { "", "-e", "0" };
>          my_perl = perl_alloc();
>          perl_construct(my_perl);
>          perl_parse(my_perl, NULL, 3, embedding, NULL);
>          perl_run(my_perl);
>          perl_eval_pv("print qq(Zero is -$0-\n);$0 =
> 'realnamefromargv[0]here';print qq(Zero is -$0-\n);", TRUE);

try:
          perl_eval_pv("print qq(Zero is -$0-\n);local $0 =
 'realnamefromargv[0]here';print qq(Zero is -$0-\n);", TRUE);

>          perl_destruct(my_perl);
>          perl_free(my_perl);
> }
>
> So does anyone have any insight as to why it flops and/or how to set $0
> with another value in those examples?
> (I can get argv[0] into the Perl no prob, I just can't set $0 )
>
> TIA
>
> Lee.M - JupiterHost.Net

Also - snoop around mod_perl (http://perl.apache.org).

Aloha => Beau;


---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org


Mime
View raw message