Just a note: I also tried $main::0 as well as $0
(as in
perl -e '$0 = "foo";print "$0\n";'
perl -e '$main::0 = "foo";print "$0\n";')
after I used caller() to make sure it was in main::.
Any ideas?
JupiterHost.Net wrote:
Hello group!
Maybe a bit much for a beginners list (I looked and looked and couldn't
find any specific lists) but Perhaps a guru or two will know the answer :)
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 problems 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.
#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);
perl_destruct(my_perl);
perl_free(my_perl);
}
So does anyone have any insigth as to why it flops and/or how to set $0
with another value in those examples?
TIA
Lee.M - JupiterHost.Net
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>