perl - Perl 脚本(用于调用 Mac::AppleScript Perl 模块)
问题描述
我正在使用 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";
解决方案
问题:
"
您的双引号字符串文字中有一个未转义的字符。- 您使用从未声明或初始化的变量。
- 你的代码中有一个流浪
,"n"
者。 - 您的代码存在代码注入错误。
- 错误信息是在 中找到的
$@
,不是$!
。
固定的:
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: $@");
未经测试。
推荐阅读
- javascript - 计算视频播放次数的安全方法
- sql-server - 使用 CTE 而不是循环执行逻辑
- android - Android AdMob 实现 play-services 问题
- c# - 无法继承密封类的最佳解决方法?
- java - 继承的类同义词:性能?
- java - 如何使用 camel-xstream 定义自定义命名空间和标签别名
- java - 如何正确模拟 Hibernate Session get(Class
entityType, 可序列化 id) - python - 排除 ASCII 字符
- image-processing - ValueError:步幅的长度应为 1、1 或 3,但为 2
- c# - 父表单中未触发表单关闭事件