无法使用路径作为bash中的参数调用perl子例程

时间:2017-09-27 10:10:07

标签: perl

我正在使用路径作为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;

1 个答案:

答案 0 :(得分:4)

你需要引用你的字符串。您不能使用双引号""来执行此操作,因为您已将它们用于-e标志的shell参数。请使用单引号''或引号运算符qqq

$ 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可能认为存在模式匹配或分区,这种情况下的语法错误。