Mais conteúdo relacionado Semelhante a Yapcasia2011 - Hello Embed Perl (20) Yapcasia2011 - Hello Embed Perl2. About me
Hideaki Ohno
Github: hideo55
Twitter: @hide_o_55
PAUSE: HIDEAKIO
Blog: http://d.hatena.ne.jp/hide_o_55/
Perl/C/C++/JavaScript
7. What’s embed perl?
Using Perl From C
Adding a Perl interpreter to C program
Calling a Perl subroutine from C program
Evaluting a Perl statement from C program
Performing Perl pattern matches and
substitutions from C program
Fidding with the Perl stack from C
program
9. Example of embed perl
mod_perl (Apache)
http_perl_module (Nginx)
PL/Perl (PostgreSQL)
MyPerl (MySQL)
10. Example of embed perl
mod_perl (Apache)
http_perl_module (Nginx)
PL/Perl (PostgreSQL)
MyPerl (MySQL)
node-perl (Node.js)
13. Why use embed perl?
Regexp!!!
Don’t needs PCRE because perl’s regexp engine
is 100% perl compatible!
16. Perl data type
SV SCALAr value
AV ARRAY value
HV HASH value
GV Glob value
RV Reference value
17. Basic usage
#include <EXTERN.h>
#include <perl.h>
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);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
perl_run(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
}
20. Create interpreter
PerlInterpreter *perl = perl_alloc();
perl_construct(perl);
If you want use multiple interpreter,
use PERL_SET_CONTEXT().
It initialize global state for trace
“current” interpreter.
22. Parse
perl_parse(
register PerlInterpreter *my_perl,
XSINIT_t xsinit,
int argc,
char** argv,
char** env
);
xsinit is function pointer of initialize
XS module.
perl -MExtUtils::Embed -e xsinit -- -o perlxsi.c
23. Run
perl_run()
Execute “INIT” Block
Execute perl code
mod_perl execute this function once at
initialize time.
nginx perl module don’t execute this
function.
24. Why nginx don’t execute
perl_run()?
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
If set PL_exit_flags
PERL_EXIT_DESTRUCT_END, “END” Block is
executed in perl_destruct().
28. Call subroutine and get
return value
dSP;
ENTER;
SAVETMPS;
PUSHMARK(sp);
XPUSHs(...); //push some variables to stack
PUTBACK;
count = call_sv(sub, G_EVAL);
SPAGAIN;
if (count != 1) croak(“”);
x = SvPVx(POPs, n_a);
30. Override PerlIO layers
extern "C" {
#define PERLIO_NOT_STDIO 0
#define USE_PERLIO
#include <EXTERN.h>
#include <perl.h>
}
See also perlio.h
31. Override PerlIO layers
void override_stdhandle (pTHX_ SV *sv,const char *name ) {
int status;
GV *handle = gv_fetchpv(name,TRUE,SVt_PVIO);
SV *svref = newRV_inc(sv);
save_gp(handle, 1);
status = Perl_do_open9(aTHX_ handle, ">:scalar", 8 , FALSE, O_WRONLY,
0, Nullfp, svref, 1);
if(status == 0) {
Perl_croak(aTHX_ "Failed to open %s: %" SVf,name, get_sv("!",TRUE));
}
}
32. Override PerlIO layers
void restore_stdhandle (pTHX_ const char *name) {
int status;
GV *handle = gv_fetchpv(name,FALSE,SVt_PVIO);
if( GvIOn(handle) && IoOFP(GvIOn(handle)) &&
(PerlIO_flush(IoOFP(GvIOn(handle))) == -1 ) ) {
Perl_croak(aTHX_ "Failed to flush %s: "
SVf,name,get_sv("!",TRUE) );
}
}
34. Compile
use ExtUtils::Embed
% cc -o myperl myperl.c `perl -MExtUtils::Embed
-e ccopts -e ldopts`
See ‘perldoc perlembed’ if you want to know
other way of to compile embed perl.
37. Summary
Embed perl is not difficult
If you need the power of Perl in your C
program, then hesitate to jump into the
world of embedded Perl
By challenging the embedded Perl, even
deeper understanding of Perl
Notas do Editor \n &#x307E;&#x305A;&#x3001;&#x81EA;&#x5DF1;&#x7D39;&#x4ECB;&#x304B;&#x3089;&#x3055;&#x305B;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;\n&#x306F;&#x3058;&#x3081;&#x307E;&#x3057;&#x3066;&#x5927;&#x91CE;&#x79C0;&#x660E;&#x3068;&#x8A00;&#x3044;&#x307E;&#x3059;&#x3002;\nYAPC::Asia&#x306B;&#x53C2;&#x52A0;&#x3059;&#x308B;&#x306E;&#x306F;&#x4ECA;&#x56DE;&#x304C;2&#x56DE;&#x76EE;&#x3067;&#x3059;&#x3002;\n&#x305D;&#x3082;&#x305D;&#x3082;Perl&#x306E;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x306B;&#x95A2;&#x308F;&#x3063;&#x305F;&#x306E;&#x304C;&#x53BB;&#x5E74;&#x306E;YAPC::Asia&#x304C;&#x521D;&#x3081;&#x3066;&#x3067;&#x3001;&#x305D;&#x306E;&#x5F8C;&#x3053;&#x306E;&#x4E00;&#x5E74;Hachioji.pm&#x3001;Perl Advent Calendar&#x306B;&#x53C2;&#x52A0;&#x3059;&#x308B;&#x306A;&#x3069;&#x95A2;&#x308F;&#x3063;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x666E;&#x6BB5;&#x306E;&#x4ED5;&#x4E8B;&#x306F;&#x6240;&#x8B02;SIer&#x3067;&#x30B9;&#x30FC;&#x30C4;&#x7740;&#x3066;&#x4ED5;&#x4E8B;&#x3092;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n\n \n \n \n \n &#x30FB;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x306B;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;\n&#x30FB;Perl&#x30B5;&#x30D6;&#x30EB;&#x30FC;&#x30C1;&#x30F3;&#x3092;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;&#x547C;&#x3073;&#x51FA;&#x3059;\n&#x30FB;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;Perl&#x306E;&#x6587;&#x3092;&#x8A55;&#x4FA1;&#x3059;&#x308B;\n&#x30FB;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;Perl&#x306E;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x30DE;&#x30C3;&#x30C1;&#x3001;&#x7F6E;&#x63DB;&#x3092;&#x5B9F;&#x884C;&#x3059;&#x308B;\n&#x30FB;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;Perl&#x306E;&#x30B9;&#x30BF;&#x30C3;&#x30AF;&#x3092;&#x64CD;&#x4F5C;&#x3059;&#x308B;\n &#x3053;&#x306E;&#x3088;&#x3046;&#x306B;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x306B;Perl&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x9001;&#x308A;&#x8FBC;&#x307F;&#x305D;&#x306E;&#x51FA;&#x529B;&#x3092;&#x5F97;&#x308B;&#x3068;&#x3044;&#x3046;&#x5F62;&#x5F0F;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;\n &#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x3092;&#x5229;&#x7528;&#x3057;&#x305F;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x3067;&#x6709;&#x540D;&#x306A;&#x3082;&#x306E;&#x3092;&#x3042;&#x3052;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\nmod_perl&#x306F;Apache HTTP Server&#x306B;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x3092;&#x57CB;&#x3081;&#x8FBC;&#x3080;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;\nnode-perl&#x3092;&#x4F5C;&#x3063;&#x305F;&#x52D5;&#x6A5F;&#x306F;&#x305F;&#x3060;&#x4F5C;&#x308A;&#x305F;&#x304B;&#x3063;&#x305F;&#x304B;&#x3089;\nNode.js&#x3067;&#x4F55;&#x304B;&#x4F5C;&#x308A;&#x305F;&#x3044;&#x3001;Node.js &#x306E;&#x30A2;&#x30C9;&#x30AA;&#x30F3;&#x306F;C++&#x3067;&#x66F8;&#x3051;&#x308B;&#x3001;C++&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x306F;C&#x306E;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3082;&#x4F7F;&#x3048;&#x308B;&#x3001;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x306F;C&#x3060;&#x304B;&#x3089;&#x7D44;&#x307F;&#x8FBC;&#x3081;&#x308B;&#xFF01;&#x3068;&#x3044;&#x3046;&#x6975;&#x3081;&#x3066;&#x81EA;&#x7136;&#x306A;&#x6D41;&#x308C;&#x3067;&#x3059;&#x3002;\n \n &#x30FB;Perl&#x3068;&#x3044;&#x3048;&#x3070;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x3001;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x3068;&#x3044;&#x3048;&#x3070;Perl&#x3068;&#x8A00;&#x3063;&#x3066;&#x3082;&#x3044;&#x3044;&#x304F;&#x3089;&#x3044;&#x5207;&#x3063;&#x3066;&#x3082;&#x5207;&#x308C;&#x306A;&#x3044;&#x95A2;&#x4FC2;\n&#x30FB;&#x590F;&#x306E;Shibuya.pm&#x3082;&#x30C6;&#x30FC;&#x30DE;&#x306F;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x3001;&#x6B63;&#x898F;&#x2191;&#x8868;&#x73FE;&#x2193;&#xFF1F;\n&#x30FB;Perl&#x3092;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x3068;&#x3057;&#x3066;&#x4F7F;&#x3048;&#x3070;&#x3001;&#xFF30;&#xFF23;&#xFF32;&#xFF25;&#x3068;&#x304B;&#x4F7F;&#x308F;&#x306A;&#x304F;&#x3066;&#x3082;100%Perl&#x30B3;&#x30F3;&#x30D1;&#x30C1;&#x30D6;&#x30EB;&#x306A;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x304C;&#x4F7F;&#x3048;&#x308B;\n &#x30FB;&#x67D4;&#x8EDF;&#x304B;&#x3064;&#x5F37;&#x529B;&#x306A;&#x6587;&#x5B57;&#x5217;&#x64CD;&#x4F5C;\n&#x30FB;CPAN&#x306E;&#x529B;&#x306E;&#x6069;&#x6075;&#x3092;&#x53D7;&#x3051;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;\n &#x7D44;&#x307F;&#x8FBC;&#x307F;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x306E;&#x57FA;&#x790E;\n \n &#x3053;&#x308C;&#x304C;&#x6700;&#x3082;&#x5358;&#x7D14;&#x306A;&#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x306E;&#x4F8B;&#x3067;&#x3059;&#x3002;\n&#x3053;&#x308C;&#x306F;&#x901A;&#x5E38;&#x306E;perl&#x3068;&#x540C;&#x69D8;&#x306B;&#x5F15;&#x6570;&#x3068;&#x3057;&#x3066;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x540D;&#x304C;&#x6E21;&#x3055;&#x308C;&#x308C;&#x3070;&#x5B9F;&#x884C;&#x3057;&#x3001;-e&#x30AA;&#x30D7;&#x30B7;&#x30E7;&#x30F3;&#x306A;&#x3069;&#x306E;&#x5B9F;&#x884C;&#x3082;&#x3067;&#x304D;&#x307E;&#x3059;\n EXTERN.h&#x306F;Windows&#x306A;&#x3069;&#x7279;&#x5B9A;&#x306E;OS&#x7528;&#x306E;&#x30B7;&#x30F3;&#x30DC;&#x30EB;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x307E;&#x3059;\nperl.h&#x306F;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x30AA;&#x30D7;&#x30B7;&#x30E7;&#x30F3;&#x306B;&#x5F93;&#x3063;&#x3066;&#x30B7;&#x30F3;&#x30DC;&#x30EB;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x305F;&#x308A;&#x3001;&#x30D8;&#x30C3;&#x30C0;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x30A4;&#x30F3;&#x30AF;&#x30EB;&#x30FC;&#x30C9;&#x3059;&#x308B;\n C++&#x304B;&#x3089;&#x4F7F;&#x3046;&#x5834;&#x5408;&#x306F;extern &#x201C;C&#x201D; &#x3092;&#x4F7F;&#x7528;\n &#x30FB;perl_alloc()&#x306F;&#x30E1;&#x30E2;&#x30EA;&#x306E;&#x78BA;&#x4FDD;\n&#x30FB;perl_constract()&#x304C;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306E;&#x521D;&#x671F;&#x5316;\n&#x30FB;&#x8907;&#x6570;&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x3092;&#x4F7F;&#x7528;&#x3059;&#x308B;&#x5834;&#x5408;&#x306F;&#x3001;PERL_SET_CONTEXT()&#x3068;&#x3044;&#x3046;&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x4F7F;&#x7528;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;\n&#x3053;&#x308C;&#x306F;&#x3001;&#x73FE;&#x5728;&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x3092;&#x7279;&#x5B9A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x306A;&#x72B6;&#x614B;&#x3092;&#x521D;&#x671F;&#x5316;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x3082;&#x306E;&#x3067;&#x3001;&#x5B9F;&#x969B;&#x306B;&#x306F;cthread_set_data()&#x3067;&#x30B9;&#x30EC;&#x30C3;&#x30C9;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x30B9;&#x30C8;&#x30EC;&#x30FC;&#x30B8;&#x306B;&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x306E;&#x60C5;&#x5831;&#x3092;&#x4FDD;&#x5B58;&#x3059;&#x308B;\n &#x30FB;get_hash_seed() &#x30CF;&#x30C3;&#x30B7;&#x30E5;&#x30C6;&#x30FC;&#x30D6;&#x30EB;&#x306E;&#x305F;&#x3081;&#x306E;&#x30B7;&#x30FC;&#x30C9;&#x3092;&#x53D6;&#x5F97;\n&#x30FB;parse_body()&#x3067;&#x306F;yyparse()&#x3067;&#x69CB;&#x6587;&#x89E3;&#x6790;&#x3001;yylex()&#x3067;&#x5B57;&#x53E5;&#x89E3;&#x6790;&#x3001;OPCODE&#x30C4;&#x30EA;&#x30FC;&#x69CB;&#x7BC9;&#x3001;PL_check&#x306B;&#x3088;&#x308B;&#x6587;&#x6CD5;&#x30A8;&#x30E9;&#x30FC;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3001;OPCODE&#x30C4;&#x30EA;&#x30FC;&#x306E;&#x5909;&#x63DB;&#x3001;&#x6700;&#x9069;&#x5316;&#x3092;&#x884C;&#x308F;&#x308C;&#x308B;\n&#x30FB;process_special_block()&#x3067;BEGIN&#x30D6;&#x30ED;&#x30C3;&#x30AF;&#x5B9F;&#x884C;&#x3001;UNITCHECK&#x3001;CHECK&#x3001;END&#x306F;&#x914D;&#x5217;&#x306B;unshift&#x3001;INIT&#x306F;push&#x3055;&#x308C;&#x3066;&#x3044;&#x304F;\n\n &#x3053;&#x308C;&#x304C;perl_parse&#x306E;&#x30D7;&#x30ED;&#x30C8;&#x30BF;&#x30A4;&#x30D7;&#x3067;&#x3059;&#x3002;\n&#x3053;&#x3053;&#x3067;&#x6CE8;&#x76EE;&#x3059;&#x3079;&#x304D;&#x306F;&#x7B2C;&#x4E8C;&#x5F15;&#x6570;&#x306E;xsinit&#x3067;&#x3059;&#x3002;\n&#x3053;&#x306E;xsinit&#x306F;C/C++&#x3067;&#x66F8;&#x304B;&#x308C;&#x305F;&#x30E2;&#x30B8;&#x30E5;&#x30FC;&#x30EB;&#x3092;&#x30ED;&#x30FC;&#x30C9;&#x3059;&#x308B;&#x95A2;&#x6570;&#x3078;&#x306E;&#x95A2;&#x6570;&#x30DD;&#x30A4;&#x30F3;&#x30BF;&#x3067;&#x3059;&#x3002;\n&#x3053;&#x306E;xsinit&#x3067;Dynaloader&#x3084;XSLoader&#xFF64;&#x72EC;&#x81EA;&#x306E;&#x30D6;&#x30FC;&#x30C8;&#x30B9;&#x30C8;&#x30E9;&#x30C3;&#x30D7;&#x304C;&#x5FC5;&#x8981;&#x306A;&#x30E2;&#x30B8;&#x30E5;&#x30FC;&#x30EB;&#x304C;&#x3042;&#x308C;&#x3070;&#x305D;&#x306E;&#x30D6;&#x30FC;&#x30C8;&#x30B9;&#x30C8;&#x30E9;&#x30C3;&#x30D7;&#x3092;&#x547C;&#x3073;&#x51FA;&#x3057;&#x307E;&#x3059;&#x3002;\n&#x3053;&#x306E;xsinit&#x306F;ExtUtils::Embed&#x3067;&#x751F;&#x6210;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#x30EA;&#x30F3;&#x30AF;&#x3059;&#x308C;&#x3070;&#x554F;&#x984C;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;\n perl_run()&#x306E;&#x52D5;&#x4F5C;&#x3068;&#x3057;&#x3066;&#x306F;\n&#x30FB;INIT&#x30D6;&#x30ED;&#x30C3;&#x30AF;&#x306E;&#x5B9F;&#x884C;\n&#x30FB;Perl&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x5B9F;&#x884C;\n&#x30FB;mod_perl&#x306E;&#x5834;&#x5408;&#x306F;&#x521D;&#x671F;&#x5316;&#x6642;&#x306B;&#xFF11;&#x56DE;&#x3060;&#x3051;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x3042;&#x305F;&#x308A;&#x304C;mod_perl&#x3068;&#x9045;&#x5EF6;&#x30ED;&#x30FC;&#x30C9;&#x3084;Attribute&#x3068;&#x76F8;&#x6027;&#x304C;&#x60AA;&#x3044;&#x539F;&#x56E0;\n&#x30FB;nginx&#x306E;perl module&#x306F;perl_run()&#x306F;&#x5B9F;&#x884C;&#x3057;&#x307E;&#x305B;&#x3093;\n \n \n &#x554F;&#xFF1A;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x304B;&#x3089;&#x7D50;&#x679C;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x306B;&#x306F;&#x3069;&#x3046;&#x3059;&#x308C;&#x3070;&#x3044;&#x3044;&#x306E;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;\n A:&#x3084;&#x308A;&#x65B9;&#x306F;&#x4E00;&#x3064;&#x3058;&#x3083;&#x306A;&#x3044;\n &#x3053;&#x3061;&#x3089;&#x304C;&#x4E00;&#x822C;&#x7684;&#x306A;&#x65B9;&#x6CD5;\nmod_perl&#x3082;nginx&#x306E;perl module&#x3082;&#x3053;&#x306E;&#x65B9;&#x6CD5;\n&#x7279;&#x5B9A;&#x306E;&#x5909;&#x6570;&#x306B;&#x7D50;&#x679C;&#x3092;&#x53CE;&#x3081;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x305F;&#x3081;&#x3001;&#x81EA;&#x7531;&#x5EA6;&#x304C;&#x4F4E;&#x3044;\n&#x30FB;XPUSHs()&#x3067;&#x5F15;&#x6570;&#x3068;&#x306A;&#x308B;&#x5909;&#x6570;&#x3092;&#x30B9;&#x30BF;&#x30C3;&#x30AF;&#x306B;&#x7A4D;&#x3093;&#x3067;&#x3001;call_sv()&#x3067;&#x30B5;&#x30D6;&#x30EB;&#x30FC;&#x30C1;&#x30F3;&#x304C;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x308B;&#x3002;\n&#x30FB;count&#x306F;&#x623B;&#x308A;&#x5024;&#x306E;&#x6570;\n&#x30FB;POPs&#x3067;&#x30B9;&#x30BF;&#x30C3;&#x30AF;&#x304B;&#x3089;&#x5F15;&#x6570;&#x3092;&#x53D6;&#x308A;&#x51FA;&#x3059;\n &#x6A19;&#x6E96;&#x51FA;&#x529B;&#x3001;&#x6A19;&#x6E96;&#x30A8;&#x30E9;&#x30FC;&#x51FA;&#x529B;&#x306E;&#x51FA;&#x529B;&#x5148;&#x3092;&#x30B9;&#x30AB;&#x30E9;&#x5909;&#x6570;&#x306B;&#x5909;&#x3048;&#x308B;\n \n Perl_do_open9()&#x3067;&#x30CF;&#x30F3;&#x30C9;&#x30EB;&#x306E;&#x51FA;&#x529B;&#x5148;&#x3068;&#x3057;&#x3066;&#x30B9;&#x30AB;&#x30E9;&#x5909;&#x6570;&#x306E;&#x30EA;&#x30D5;&#x30A1;&#x30EC;&#x30F3;&#x30B9;&#x3092;&#x6307;&#x5B9A;&#x3057;&#x3066;&#x3044;&#x308B;\n &#x4FDD;&#x5B58;&#x3057;&#x3066;&#x304A;&#x3044;&#x305F;&#x5143;&#x306E;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x30CF;&#x30F3;&#x30C9;&#x30EB;&#x3092;&#x53D6;&#x308A;&#x51FA;&#x3057;&#x3066;&#x3001;&#x5FA9;&#x5E30;&#x3055;&#x305B;&#x308B;\n &#x3084;&#x3063;&#x3066;&#x308B;&#x3053;&#x3068;&#x306F;&#x30B3;&#x30EC;&#x3068;&#x4F3C;&#x305F;&#x3088;&#x3046;&#x306A;&#x3082;&#x306E;\n &#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;ExtUtils::Embed&#x3092;&#x5229;&#x7528;&#x3059;&#x308C;&#x3070;&#x5FC5;&#x8981;&#x306A;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x30AA;&#x30D7;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x751F;&#x6210;&#x3057;&#x3066;&#x304F;&#x308C;&#x307E;&#x3059;&#x3002;\n&#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x3092;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x3059;&#x308B;&#x4ED6;&#x306E;&#x65B9;&#x6CD5;&#x3092;&#x77E5;&#x308A;&#x305F;&#x3044;&#x5834;&#x5408;&#x306F;perldoc perlembed&#x3092;&#x898B;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;\n \n &#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x3092;&#x3084;&#x308B;&#x306B;&#x3042;&#x305F;&#x3063;&#x3066;&#x3001;&#x5FC5;&#x8981;&#x306A;&#x60C5;&#x5831;&#x6E90;&#x3067;&#x3059;&#x3002;\nperlembed&#x306F;&#x5FC5;&#x8AAD;&#x3068;&#x3057;&#x3066;&#x3042;&#x3068;&#x306F;XS&#x95A2;&#x9023;&#x306E;perldoc&#x3092;&#x8AAD;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;\n&#x66F8;&#x7C4D;&#x3067;&#x306F;&#x5C11;&#x3057;&#x53E4;&#x304F;&#x3066;&#x3001;&#x6D0B;&#x66F8;&#x3067;&#x3059;&#x304C;Extending and Embedding Perl&#x3068;&#x3044;&#x3046;&#x672C;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;PDF&#x7248;&#x3067;&#x3042;&#x308C;&#x3070;$36&#x7A0B;&#x5EA6;&#x3067;&#x8CB7;&#x3048;&#x308B;&#x306F;&#x305A;&#x3067;&#x3059;&#x3002;\n &#x30FB;&#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x306F;&#x96E3;&#x3057;&#x304F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;\n&#x30FB;&#x3082;&#x3057;&#x3042;&#x306A;&#x305F;&#x306E;C&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x3067;Perl&#x306E;&#x529B;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x3063;&#x305F;&#x3089;&#x8FF7;&#x308F;&#x305A;&#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x306E;&#x6B63;&#x89E3;&#x306B;&#x98DB;&#x3073;&#x8FBC;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;\n&#x30FB;&#x307E;&#x305F;&#x3001;&#x57CB;&#x3081;&#x8FBC;&#x307F;Perl&#x306B;&#x6311;&#x6226;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x3088;&#x308A;&#x3001;Perl&#x306B;&#x5BFE;&#x3059;&#x308B;&#x7406;&#x89E3;&#x304C;&#x3055;&#x3089;&#x306B;&#x6DF1;&#x307E;&#x308A;&#x307E;&#x3059;\n &#x3054;&#x6E05;&#x8074;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x4F55;&#x304B;&#x8CEA;&#x554F;&#x306F;&#x3042;&#x308A;&#x307E;&#x3059;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;\n