Gururiの日記

かつてはてなダイアリーで付けていたGururiの日記

久々にperl

AppleScriptからmdlsの出力を使いたかったので。

#!/usr/bin/perl
while(<>){
chomp;
s/ +/ /g;
if( (1..1) ){
	s/^kMD/{kMD/;
}else{
	s/^kMD/,kMD/;
}
if ( /=/ ){
	s/=/:/;
	s/(\d+-\d+-\d+ \d\d+:\d\d:\d\d [+-]\d\d\d\d)/date "\1"/;
}else{
	s/^ ([^",]+)(,?)/ "\1"\2/;
	s/("\d+-\d+-\d+ \d\d+:\d\d:\d\d [+-]\d\d\d\d")/date \1/;
}
s/\($/{/;
s/^\)$/}/;
print;
}
print "}";

AppleScriptからはこんな感じで。

on run
	tell application "Finder"
		set s to selection
		if (class of s) is list then
			my mdls(item 1 of s)
		else
			my mdls(s)
		end if
	end tell
end run

on mdls(f)
	run script (do shell script "mdls " & quoted form of POSIX path of (f as alias) & "|/usr/local/bin/mdInfo")
end mdls

perlの方、Safariで書いてるとバックスラッシュにならないのは仕様なんだっけか*1
AppleScriptのmdlsハンドラは、mdlsの出力をAppleScriptのレコードとして返すようになっている。はず。たぶん大丈夫だ。
久々にperl書いたので色々悩んだが、まぁ出来たから良しとするか。

*1:そのままTerminalにペーストすると化けるので、コピペする時は一回TextEditなどにペーストしてコピーし直すべし。