2009年10月9日金曜日

10/9 SPADE with Perl

今日は遅刻してしまった。
最近夜型になってしまったので再びインターンのときのような健康的な生活に改めたいです。

SPADEではプリプロセッサとしてPerlを利用できる。
ファイル名を.dpsから.dmmに変更すると、<% ~ %>で囲まれた部分はPerlで処理される。
(ブログの制約で、<>は本当は半角なのだが全角で書いている 10/26追記)

この場合、#define文や%1,%2...によるspadecへの引数が使えなくなるので要注意!
代わりに、<% $foo = $ARGV[0]; $var = $ARGV[1]; %>とでもして、
Perlの変数に引数を渡すようにして解決しましょう。

Func0-0,Func0-1.....Func9-8,Func9-9というようなストリームを作る場合。

<% for($i = 0; $i < 10; $i++){ %>
  <% for($j = 0; $j < 10; $j++){ %>
Func<$=${i}."-"${j}%>
  <% } %>
<% } %>

とすればOK。「<%=」は内部的には「<% print 」として評価される。

.dmmファイルは、内部では逆に<% %>外の部分をprintしつつ<% %>内の部分を実行させるようなPerlスクリプトに変換され、その生成結果を.dpsファイルとしていつもどおりにコンパイルを行うようになっている。
この処理は内部でspadecが勝手にやってくれるので、Makefileの.dpsという部分を.dmmに変えて、
いつものようにmakeするだけで.dmmファイルでPerlを利用することができる。
コンパイルがうまくいかない場合、途中生成された.dpsファイルを見ればどこがおかしいかはだいたいわかる。

ごく普通のPerlを実行しているので、複雑な演算や処理も可能。ただし、コードの可読性が著しく落ちる。

1 件のコメント:

  1. コードがうまく表示されていなかったので訂正した。

    返信削除