我正在使用路径作为unix CLI模式的参数调用perl子例程。 但是获得Bareword发现了错误。无论如何要通过这个。
[ssonnad@cycrh6rtp34 ~/test]**$perl -e "require qw(./burt.pm) ;file(/u/path,/u/build/);"**
Bareword found where operator expected at -e line 1, near "/u/path"
(Missing operator before path?)
Bareword found where operator expected at -e line 1, near "/u/build"
(Missing operator before build?)
syntax error at -e line 1, near "/u/path"
Execution of -e aborted due to compilation errors.
[ssonnad@cycrh6rtp34 ~/test]$ cat burt.pm
#!/usr/software/bin/perl5.8.8
use strict;
sub file
{
my ($path1, $path2) = @_;
print "path1 $path1\n";
print "path2 $path2\n";
}
1;
答案 0 :(得分:4)
你需要引用你的字符串。您不能使用双引号""
来执行此操作,因为您已将它们用于-e
标志的shell参数。请使用单引号''
或引号运算符q
或qq
。
$ perl -e "require 'burt.pm'; file('/u/path', '/u/build');"
在单行中使用q
通常是个好主意,这样就不会干扰shell引用。
在任何情况下,在Linux系统上,您可能希望对''
之后的Perl程序使用单引号-e
,因为双引号""
启用了您的shell'引用机制。
在Perl中,双引号""
打开插值,因此填充变量和特殊字符。我会像这样写你的程序:
$ perl -e 'require q{burt.pm}; file( q{/u/path}, q{/u/build} );'
另请注意,没有strict
pragma的Perl程序会将裸字视为字符串,但斜杠/
不是裸字的一部分。 Perl可能认为存在模式匹配或分区,这种情况下的语法错误。