C言語でPerlを使ってみるテスト。


C言語Perlを使うメリットとして

  • 文字列処理が非常に楽なPerlに文字列処理を行わせる事ができる
  • PerlCUIメインだが、GUIという選択も出来る


perlinc.c

#include <EXTERN.h>
#include <perl.h>


int main(){
    // Perlインタプリタ
    PerlInterpreter* perl;

    // Perlインタプリタの確保
    // Perlを利用するための領域(メモリ)を確保
    perl = perl_alloc();

    // Perlインタプリタを初期化
    perl_construct(perl);

    // perl_parseに渡すコマンドライン引数的なもの
    char *perl_argv[] = {"", "hello.pl"};

    // PerlインタプリタにPerlスクリプトを解析することを伝える
    // 第一引数
    //   Perlインタプリタ
    // 第二引数
    //   よくわかりません。NULLでいいと思う。
    // 第三引数
    //   第四引数の要素数を入れる。
    //   Perlっぽく書くならscalar(@ARGV)
    // 第四引数
    //   Perlを実行するためのコマンドライン要素を入れる。
    //   argvをそのまま使ってもいい。
    //   argvとはPerlでいうところの@ARGVのこと。
    // 第五引数
    //   通常、envと呼ばれる特殊変数を入れる。
    //   envとはmain関数の第三引数のことで
    //   環境変数が入ってくる。
    //   環境によって対応しているかどうかまちまち。
    perl_parse(perl, NULL, 2, perl_argv, (char**)NULL);

    // Perlインタプリタに実行を伝える
    perl_run(perl);

    // Perlインタプリタの終了処理
    perl_destruct(perl);

    // Perlインタプリタのメモリ解放
    perl_free(perl);

    return 0;
}

hello.pl

#!/usr/bin/perl


use strict;

BEGIN {
    print "--- BEGIN $0 ---\n";
}

END {
    print "--- E N D $0 ---\n";
}

print "Hello, World!!\n";

コンパイル

$ cc -o perlinc perlinc.c `perl -MExtUtils::Embed -e ccopts -e ldopts`

実行

$ ./perlinc

結果

--- BEGIN hello.pl ---
Hello, World!!
--- E N D hello.pl ---