我有一个perl脚本generator.pl
,它定义了一些例程:
sub a($) {
...
print FILE "$_[0]";
...
}
...
sub b($$) {
...
print FILE "$_[0], $_[1]";
...
}
...
$subsfile = $ARGV[0] . "/subs.pl";
$generatedfile = $ARGV[0] . "/generated.file";
open FILE, '>>', "$generatedfile" or die "error trying to append: $!";
do "$subsfile";
close FILE;
我们假设,例如subs.pl
是这样的:
a(1);
a(x);
b(1-2, z);
b(1-x, i);
b(y-z, j);
我以这种方式致电generator script
:
C:\Users\Me>perl generator.pl "D:/another/path"
结果是创建了D:/another/path/generated.file
但它包含0个字节。在"print $@;"
之后打印do statement
,我正在获取:
Transliteration pattern not terminated at...
如果我尝试使用subs.pl
调用脚本,每个实际参数双引号
a("1");
a("x");
b("1-2", "z");
b("1-x", "i");
...
它有效。
如何在不使用双引号的情况下完成工作?
答案 0 :(得分:2)
tr///
是transliteration operator,也可以写为y///
。此外,可以修改它以将另一个字符作为分隔符,即。 y---
。
所以当perl看到类似的东西时,
b(y-z, j);
预计
b(y-z, j--);
这是正确的,并且在上面的示例中会计算默认变量z
中所有,
,,
j
和$_
个字符的出现次数,以及将其作为参数传递给b()
。
由于未满足编译器期望,因此会抛出:
音译模式未在...终止