ActivePerlの機能をフルに生かしつつ、秀丸マクロの機能や各種値もほぼ全て使えるところが、 hmPerlが優れている所以です。
の2つの手段で秀丸マクロを取り扱うことが出来ます。
引数の文字列を、「秀丸マクロ」として実行する。
変数名は原則的には「シングルクォーテーション」で囲みましょう。
対象の「秀丸マクロ」としてのシンボル名に対応する値を取得する。
対象の「秀丸マクロ」としてのシンボル名に、新たな値を設定する。 (読み取り専用の値には設定出来ません)
#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 );