Perl脚本(用于调用Mac :: AppleScript Perl模块)

时间:2019-05-05 06:36:02

标签: perl applescript

我正在使用shell和applescript脚本设置一些自动化。我的几个模块需要将几个参数传递给AppleScript。尽管有几种方法可以这样做,但是经过一些研究,我找到了“ Mac :: AppleScript Perl模块”,它看起来确实很有前途。但是,它需要/ usr / local / bin中的简短.pl脚本。我发现的唯一示例有两个语法错误,而且我完全没有使用Perl的经验。

我已经尝试根据我使用的语言来猜测可能会引发什么错误,但是即使我可以识别出变量没有在某些地方扩展,但仍会尝试纠正该错误在进一步的错误中,我已经对其进行了数小时的修改。有人可以看看我能解决什么语法问题吗?

#!/usr/bin/perl

use strict;
use Mac::AppleScript qw/ RunAppleScript /;

if( $#ARGV = 0) ? '"'.join('","',@ARGV).'"' : "";
my $rtn = RunAppleScript( "return run script alias ((POSIX file ""
    .$script.'") as text) with parameters {'.$args.'}' ),"n"
        or die "AppleScript Error: $!";

$rtn =~ s/(^"|"$)//g;
print $rtn,"n";

1 个答案:

答案 0 :(得分:1)

问题:

  • 用双引号括起来的字符串文字中有一个未转义的"
  • 您使用从未声明或初始化的变量。
  • 您的代码中有一个流浪,"n"
  • 您的代码遇到code injection个错误。
  • 该错误消息位于$@中,而不是$!中。

已修复:

sub text_to_as_lit { '"'.( $_[0] =~ s/([\\"])/\\$1/rg ).'"' }  #'

my ($script, @args) = @ARGV;

my $rtn = RunAppleScript(sprintf(
   "return run script alias ((POSIX file %s) as text) with parameters {%s}",
   text_to_as_lit($script),
   ( join ',', map text_to_as_lit($_), @args ),
))
    or die("AppleScript Error: $@");

未经测试。