0

我有一个 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");
...

有用。

如何在不使用双引号的情况下使事情正常进行?

4

1 回答 1

2

tr///音译运算符,也可以写成y///。此外,它可以修改为以另一个字符作为分隔符,即。y---.

所以当 perl 看到类似的东西时,

b(y-z, j);

它期望

b(y-z, j--);

这是正确的,并且在上面的示例中会计算默认变量中所有出现的z, ,,和chars ,并将其作为参数传递给j$_b().

由于没有满足编译器的期望,它会抛出:

音译模式未终止于...

于 2013-10-12T16:00:58.697 回答