在C 程式中嵌入Perl

2021-05-22 21:10:51 字數 3297 閱讀 3405

perl 庫一般在這樣的資料夾下:

/usr/local/lib/perl5/your_architecture_here/core

可以這樣得到它的位置:

perl -mconfig -e "print $config"

編譯的時候要這樣:

% gcc -o2 -dbool=char -dhas_bool -i/usr/local/include -i/usr/local/lib/perl5/i586-linux/5.003/core -l/usr/local/lib/perl5/i586-linux/5.003/core

-o interp interp.c -lperl -lm

要選擇合適的編譯器,這個會告訴你用什麼編譯器:

perl -mconfig -e "print $config"

你還要選好庫資料夾。編譯器說找不到某某函式,可能要通過 "-l" 選定目錄。如果它說找不到 "extern.h" 和 "perl.h",你可能需要通過 "-i" 改變路徑。

一些其它的庫也需要加入,可以通過這樣得到:

perl -mconfig -e "print $config"

可以通過這樣編譯:

% cc -o interp interp.c `perl -mextutils::embed -e ccopts -e ldopts`
perl( c 程式 ) 就是乙個嵌入 perl( 語言 ) 的很好的例子。這是乙個簡單的例子。

#include

/* from the perl distribution

*/#include

/* from the perl distribution

*/static

perlinterpreter

*my_perl

; /***

the perl interpreter **

*/int

main

(int

argc

, char

**argv

, char

**env

)

注意到 env 引數沒有用到。

perl_sys_init3() 和 perl_sys_term() 提供乙個執行環境。

/* 

showtime.c

*/#include

#include

static

perlinterpreter

*my_perl

;int

main

(int

argc

, char

**argv

, char

**env);

perl_sys_init3(&argc,&argv,&env);

my_perl = perl_alloc();

perl_construct(my_perl);

perl_parse(my_perl, null

, argc, argv, null

); pl_exit_flags |= perl_exit_destruct_end;

/***

skipping perl_run() **

*/ call_argv("showtime"

, g_discard | g_noargs, args);

perl_destruct(my_perl);

perl_free(my_perl);

perl_sys_term();

}

showtime 是乙個沒有引數也沒有返回值(g_noargs, g_discard)的 perl 函式。

#

! /usr/bin/perl -w

# showtime.pl

print

"i shan't be printed."

;sub

showtime

在這個例子中,我們沒有呼叫 perl_run。

#include

#include

static

perlinterpreter

*my_perl

;main

(int

argc

, char

**argv

, char

**env);

perl_sys_init3(&argc,&argv,&env);

my_perl = perl_alloc();

perl_construct( my_perl );

perl_parse(my_perl, null

, 3, embedding, null

); pl_exit_flags |= perl_exit_destruct_end;

perl_run(my_perl);

/**

treat $a as an integer *

*/ eval_pv("$a = 3; $a **= 2"

, true);

printf("a = %d/n"

, sviv(get_sv("a"

, false)));

/**

treat $a as a float *

*/ eval_pv("$a = 3.14; $a **= 2"

, true);

printf("a = %f/n"

, svnv(get_sv("a"

, false)));

/**

treat $a as a string *

*/ eval_pv("$a = 'rekcah lrep rehtona tsuj'; $a = reverse($a);"

, true);

printf("a = %s/n"

, svpv(get_sv("a"

, false), n_a));

perl_destruct(my_perl);

perl_free(my_perl);

perl_sys_term();

}

結果輸出:

在perl中嵌入shell命令

在linux中,如果要把幾個可執行程式結合起來使用,一般是採用shell或者perl,當然,python也可以。這裡說一下在perl裡嵌入shell命令的情形。一般來說,最簡單的方式就是採用 qx 就可以執行命令 1 2 cmd du sh cmd 這樣命令就執行了,但是卻並沒有輸出。要輸入的話,簡...

在notepad 中編寫perl程式並直接執行

原文發表在網易部落格 2010 10 31 17 26 00 最近在學習perl,先前一直用eclipse寫程式的,不過在網上找eclipse上的perl外掛程式,半天安裝不上,就先用notepad 寫了吧,反正都是簡短的程式.後面在網上找到可以在notepad 中配置呼叫perl執行正在編寫中程式...

C 在Panel中嵌入子窗體

關閉嵌入的其他窗體 foreach control item in this.splitcontainer.panel2.controls 開啟新窗體 frmaddproduct newfrm new frmaddproduct form newfrm new form newfrm.topleve...