4

Perl スクリプト内で perl ワンライナーを呼び出しています。

ワンライナーの意図は、ファイルから末尾のスペースを削除することです。

メインの perl スクリプト内:

`perl -pi -e 's/\s+$//' tape.txt`;

今、それは私にエラーを投げていますSubstitution replacement not terminated at -e line 2.

どこが悪いのでしょうか?

4

3 に答える 3

7

これは$/、メインの perl スクリプト内の (特殊変数) が原因です。変数は、文字``列内と同じように文字列内で補間されることに注意してください""。そこに単一引用符がいくつかあるという事実は、それを変更しません。それをエスケープする必要があります$

`perl -pi -e 's/\s+\$//' tape.txt;`
于 2012-10-03T11:35:26.673 に答える
5

バックティック構文はシェルを呼び出し、呼び出されると、シェルは渡された文字列を補間する必要があると想定します。

よりクリーンな構文は次のようになります。

system('perl -pli -e "s/\s*$//" tape.txt');

コマンドの出力をキャプチャしていないため、バッククォートを使用したりqx、代わりに使用したりするsystemことは問題ではありません。

また、スイッチを追加する-l、読み取られた各行がオートチョップされ、改行が追加されます---おそらくあなたが望むものです。

于 2012-10-03T13:08:04.800 に答える