2009-04-28 6 views
2

リモートサーバーに接続されている個人用のマシンにスクリプトを作成しています。私は、リモートサーバーにPerl 4.0またはそれ以下のバージョンがインストールされていると思うので、それを認識できません。 chompコマンドの代替手段はありますか?Perl 4を使用している場合、どのように文字列をchompするのですか?

+4

Perl 4?真剣に? Perl 5は、1994年10月17日から、正確には15年近く使われていません。あなたはその間にアップグレードされていないマシンに接続していますか?もう一度チェックすることをお勧めします。 – Tanktalus

+0

Perl 4しか付属していないマシンがあります。あなたはそれを気に入る必要はありませんが、それは本当です。 –

答えて

5

それは正確な交換ではありませんが、あなたは試みることができる:切り捨てる

$var =~ s/\r?\n?$// 

いずれかCRLF(DOS)、LF(UNIX)、CR(Macの?)。

通常のchomp演算子は、現在定義されているO/Sに対して現在定義されている$INPUT_RECORD_SEPARATORを削除します。

+0

良いアイデアですが、$ varに複数の\ n区切りの行が含まれている場合、Perl 4が正規表現で "$"をどのように解釈するかによって、最後の行ではなく最初の\ nが削除される可能性があります。 –

+0

chomping \ r \ nの代わりに、あなたが言及したように、$ /の値を取り除くだけです。 –

+0

私はそれについて考えましたが、それが動作することを確認するために手作業でPerl 4のマンページのセットを持っていませんでした。いずれにしても、私の入力パーサーはPostelの法則(「あなたが生産するものに厳密で、あなたが受け入れるものは自由」)を踏襲するので、私のバージョンは入力テキストファイルがDOSかUnixフォーマットのどちらであるかにかかわらず動作します。 – Alnitak

0

私はchop()がpre-5 perlで使われたと信じています。もちろん、chomp()と同じくらい有用ではありません。あなたはランダムな入力を処理している場合、あなたはおそらく、正規表現を使用したほうが良いでしょうが、あなたは常に、UNIX形式のファイルの構文解析している場合:状態以下のコメントとして

while (<F>) { 
    chop(); 
    do_stuff(); 
} 

を、(チョップ)常に最後を削除します文字が改行文字である場合(または行末にvarがある場合)だけでなく、左辺値の文字にもなります。私はこれを知っていたので(「chomp()」というコメントとしては役に立たない)、実際にそれを入力するのを忘れてしまった。

+1

明確にするには、chopとchompの違いは、現在の$ INPUT_RECORD_SEPARATORであるかどうかに関係なく、chop * always *が最後の文字を削除することです。 – user55400

+0

そして、入力レコードセパレータは複数の文字になる可能性があります:) –

+0

Brian、perl4の慣習はどうでしたか?私は本当に "perl5"を話すだけですが、私が調べなければならなかったperl4のコードは、彼らが解析しようとしていたファイルのフォーマットを理解していたため、人々が "chomp()"を使う方法で "chop()"を使いました。 chop()を使用しない、または保護ロジックで多くをラップするのが慣用的な場合は、例を挙げることができますか?それ以外の場合は、私のdownvotesにもかかわらず、私は "chop()の答えは、perl4でchomp()のnot-as-goodの選択肢だったと感じています"という非常に有効な答えは "chomp()の代わりにperl4? – jj33

1

チョップルートに行くのはお勧めできません。私は正規表現を使用します。他の人にとっては、よりマインタブルで透明です。記録変数を習慣的に変更すると、最終的に最終的にはパッケージが貧弱になり、奇妙なことが起こります。

関連する問題