/* Initialize perl interpreter */ void perl_scripts_init(void) { char *code, *use_code; perl_scripts = NULL; perl_sources_start(); perl_signals_start(); my_perl = perl_alloc(); perl_construct(my_perl); perl_parse(my_perl, xs_init, G_N_ELEMENTS(perl_args), perl_args, NULL); #if PERL_STATIC_LIBS == 1 perl_eval_pv("Irssi::Core::->boot_Irssi_Core(0.9);", TRUE); #endif perl_common_start(); use_code = perl_get_use_list(); code = g_strdup_printf(irssi_core_code, PERL_STATIC_LIBS, use_code); perl_eval_pv(code, TRUE); g_free(code); g_free(use_code); }
static void irssi_perl_start(void) { char *args[] = {"", "-e", "0"}; char eval_file_code[] = "package Irssi::Load;\n" "\n" "use Symbol qw(delete_package);\n" "\n" "sub eval_file {\n" " my ($filename, $id) = @_;\n" " my $package = \"Irssi::Script::$id\";\n" " delete_package($package);\n" "\n" " local *FH;\n" " open FH, $filename or die \"File not found: $filename\";\n" " local($/) = undef;\n" " my $sub = <FH>;\n" " close FH;\n" "\n" " my $eval = qq{package $package; %s sub handler { $sub; }};\n" " {\n" " # hide our variables within this block\n" " my ($filename, $package, $sub);\n" " eval $eval;\n" " }\n" " die $@ if $@;\n" "\n" " eval {$package->handler;};\n" " die $@ if $@;\n" "}\n"; char *code, *use_code; perl_signals_start(); perl_sources = NULL; my_perl = perl_alloc(); perl_construct(my_perl); perl_parse(my_perl, xs_init, 3, args, NULL); use_code = *PERL_LIB_DIR == '\0' ? "" : "use lib \""PERL_LIB_DIR"\";"; code = g_strdup_printf(eval_file_code, use_code); perl_eval_pv(code, TRUE); g_free(code); perl_common_init(); }