2017-09-27 5 views
1

私は、UNIX CLIモードのパスとしてperlサブルーチンをパラメータとして呼び出しています。 しかし、Barewordを取得中にエラーが見つかりました。とにかくこれを乗り越えるbashのパラメータとしてパスを持つperlサブルーチンを呼び出すことができません

[[email protected] ~/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. 


    [[email protected] ~/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

文字列の前後に引用符を付ける。 – simbabque

+0

パスに二重引用符を追加しようとしました。成功できませんでした –

+1

二重引用符はネストしません。一重引用符またはq()またはqq()を使用します。 – choroba

答えて

4

文字列を引用する必要があります。 ""の二重引用符は、すでに-eフラグのシェルパラメータに使用しているため、使用することはできません。一重引用符''または引用符演算子qまたはqqを代わりに使用してください。

$ perl -e "require 'burt.pm'; file('/u/path', '/u/build');" 

シェルは引用を妨害しないように、ワンライナーでqを使用することが一般的に良いアイデアです。あなたはおそらく、二重引用符は、シェルの引用メカニズムを有効""ので、-e後に行くPerlプログラムのために単一引用符''を使用するLinuxシステム上でどのような場合には

、。 Perlの、補間に二重引用符 ""ターンで

、変数と特殊文字を充填ますので、私はこのようなプログラムを記述します。

$ perl -e 'require q{burt.pm}; file(q{/u/path}, q{/u/build});' 

はまたstrictプラグマなしにPerlプログラムが扱うことに注意してくださいbarewordsは文字列として表示されますが、スラッシュ/は裸の部分ではありません。 Perlはおそらく、パターンマッチや分割があると考えています。この場合、構文エラーです。

+0

Perlモジュール( '.pm'ファイル)の命名規則は、最初の文字がcaptialで残りは小さいということです。基本的に「ucfirst」ラクダの場合。すべての小文字の名前は 'strict'、' warnings'、 're'、' utf8'などのプラグマ用に予約されています。 – simbabque

関連する問題