考虑将perl函数赋予的所有实际参数作为标量

时间:2013-10-12 09:17:38

标签: perl command

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

它有效。

如何在不使用双引号的情况下完成工作?

1 个答案:

答案 0 :(得分:2)

tr///transliteration operator,也可以写为y///。此外,可以修改它以将另一个字符作为分隔符,即。 y---

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

b(y-z, j);

预计

b(y-z, j--);

这是正确的,并且在上面的示例中会计算默认变量z中所有,j$_个字符的出现次数,以及将其作为参数传递给b()

由于未满足编译器期望,因此会抛出:

  

音译模式未在...终止