hmPerlが持つ特別な関数一覧 その②

Perlから秀丸マクロへアクセスする関数

ActivePerlの機能をフルに生かしつつ、秀丸マクロの機能や各種値もほぼ全て使えるところが、
hmPerlが優れている所以です。

  • 秀丸マクロをそのまま実行
  • 「秀丸マクロの変数」⇔「Perlの変数」を相互にやり取り。

の2つの手段で秀丸マクロを取り扱うことが出来ます。

  • Perlから秀丸マクロを実行

    • hm->Macro->Eval( ヒアドキュメント文字列 )

      引数の文字列を、「秀丸マクロ」として実行する。

  • Perlから秀丸マクロの変数の読み書き

    変数名は原則的には「シングルクォーテーション」で囲みましょう。

    • hm->Macro->Var( 変数名 )

      対象の「秀丸マクロ」としてのシンボル名に対応する値を取得する。

    • hm->Macro->Var( 変数名 , 新たな値 )

      対象の「秀丸マクロ」としてのシンボル名に、新たな値を設定する。
      (読み取り専用の値には設定出来ません)

    #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
    
    #_ = dllfuncw( #Perl, "DoString", R"PERL(
    
    # 秀丸マクロの「#aaa」という変数に3を設定。変数名はシングルクォーテーションで囲む
    hm->Macro->Var('#aaa', 3 );
    
    # 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。変数名はシングルクォーテーションで囲む
    hm->Macro->Var('$bbb', "あいうえお。" );
    
    # 秀丸マクロとして一連の文字列を実行
    hm->Macro->Eval(<<'MACRO'
        message($bbb);
        $ccc = $bbb + $bbb;
        message($ccc);
    MACRO
    );
    
    hm->debuginfo( hm->Macro->Var('$ccc') );
    hm->debuginfo( hm->Macro->Var('filename') );
    
    my $hmdate = hm->Macro->Var('date');
    hm->debuginfo( $hmdate );
    
    )PERL");
    
    freedll( #Perl );
            
  • 関数で扱うのがまどろっこしいということであれば…

    hmPerl.pmを見ればわかるように、値は「$::hm_Macro_Eval」等に対して行っているわけですから、
    それを直接取り扱った方が、ヒアドキュメント付近の括弧の対応が明瞭になることでしょう。

    #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
    
    #_ = dllfuncw( #Perl, "DoString", R"PERL(
    
    $::hm_Macro_Eval =<< 'MACRO';
    
        $$message = "テスト1\r\nテスト2\r\n";
        message($$message);
    
        // アウトプット枠へ出力
        #OP = loaddll("HmOutputPane.dll");
        #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $$message);
        freedll(#OP);
    
    MACRO
    
    # マクロ内で設定した文字列をPerl層で取得。
    hm->debuginfo( hm->Macro->Var( '$$message' ) );
    
    )PERL");
    
    freedll( #Perl );