MacPerlをつかった簡単な例

ではMacPerlをつかった例を作ってみましょう

例1

MacPerlを起動しNewを選びます。

print "はろーわーるど";
		

例2

動くことを確認したら次はこれをアップルスクリプトから呼び出します。 ハイパーカードのボタンに埋め込んでみましょう
まずハイパーカードで新規ボタンをつくりスクリプト言語をアップルスクリプトにします。

on mouseUp
	set Perl_script to "print \"はろーわーるど\";"--(1)
	
	tell application "MacPerl"
		set |戻り値| to Do Script {Perl_script} mode Batch--(2)
	end tell
	display dialog |戻り値|--(3)
end mouseUp
	
(1)変数Perl_scriptに上のやつを入れます
このときエスケープに気をつけないといけません。
Perlのスクリプトをこのように埋め込む場合 まず\を\\にしてから"を\"にして貼り付ければいいと思います
(2)ここでPerlに送られ戻り値に入ります。
(3)確認のため
以上で完成です。

例3

エスケープが面倒くさいですね
Perl_scriptをフィールドにいれてみましょう
新規フィールドを作り名前をPerl_scriptにします ここにprint "はろーわーるど";をそのまま入れます 前のボタンを書き直します。

on mouseUp
	set Perl_script to card field "Perl_script"--(1)
	
	tell application "MacPerl"
		set |戻り値| to Do Script {Perl_script} mode Batch
	end tell
	display dialog |戻り値|
end mouseUp
	
(1)を直します この方法だとそのまま貼れて、Perlのスクリプトを作り直すのも楽です。

例4

簡単すぎたかもしれませんので、引数を渡す場合も考えてみましょう アップルスクリプトのリストは、ソートできません。osaxを使う手もありますがPerlにやってもらいましょう
その前に以前作ったカードをコピーカードとしてそのあとにでもペーストカードとすればハイパーカードのデータベースとしての 機能が生きます。

ここでも例3のカードを使い回します
Perl_scriptのフィールドに以下の文を入れます

#!/usr/local/bin/perl-w
use strict;
my@l = split /\t/,$ARGV[0];--(1)
@l= sort {$a<=>$b}@l;
print join "\t",@l;
(1)の上2行は決まり文句です。
$ARGV[0]に渡された引数が入ります。
もし二個以上引数が渡される場合$ARGV[1],$ARGV[2]・・・に渡されます。
実は一行で書けるのですが、丁寧に書いてます。

次にボタンのスクリプトを書き換えます。

on mouseUp
	set |リスト| to {5, 2, 1, 4, 3}--(1)
	set text item delimiters of AppleScript to {tab}
	set |リスト| to |リスト| as string
	
	set Perl_script to card field "Perl_script" 
	
	tell application "MacPerl"
		set |戻り値| to Do Script {Perl_script, |リスト|} mode Batch
	end tell
	set |戻り値| to every text item of |戻り値|--(2)
	set text item delimiters of AppleScript to {""}
	display dialog |戻り値|
end mouseUp
(1)でバラバラだったリストが
(2)でソートされたリストになっています。
(2)は無くてもいいんですが、何となくリストのクラスに戻したかったので、つけました。
変数を二個以上渡すときはコンマ切りで変数を追加していきます。

まとめ

いかがだったでしょうか。
外部にファイルを作らなくていいというのは、美しいと思いませんでしたか?
カードはコピーして使い回せばいいんです。
フィールドを使えば、エスケープなんて考えなくてもいいんです。
一応作ったやつを置いておきます。 ダウンロード