In the original version of the program:
/*
python.c - 27/01/2026
by bliako (bliako at cpan org)
for https://perlmonks.org/?node_id=11167241
Run it either with a Perl CLI and a Perl script,
like you would normally do with perl script.pl,
perl -e ... etc. or with a python CLI and a python script.
If the script does not parse as valid Perl code,
it will pass the CLI and the script to a python interpreter.
CAVEAT: it will fallback to python if your script is Perl
but has syntax errors.
compile it with:
gcc python.c -o python `perl -MExtUtils::Embed -e ccopts -e ldopt
+s`
*/
#include <EXTERN.h> /* from the Perl distribution */
#include <perl.h> /* from the Perl distribution */
static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
/* You gotta love Perl */
int main(int argc, char **argv, char **env)
{
PERL_SYS_INIT3(&argc,&argv,&env);
my_perl = perl_alloc();
perl_construct(my_perl);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
int ret = perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
if( ret ){
perl_destruct(my_perl);
perl_free(my_perl);
// add here language detection logic,
// various options available open source
fprintf(stderr, "I guess it is &*^#$* pyton /sic/ ...\n");
execvpe("/usr/bin/python", argv, env);
}
printf("It parses as Perl so I am running it ...\n");
perl_run(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
exit(EXIT_SUCCESS);
}
|