2012-02-14 17 views
3

私はPerlでchompの奇妙な動作を見つけましたが、なぜchompがこのように動作しているのか理解できません。期待通りに次の行が動作しませんperlでchompが期待通りに動作しない

if (chomp($str1) eq chomp($str2)) 

しかし、以下の罰金

chomp $str1; 
chomp $str2; 
if ($str1 eq $str2) 

を働くあなたはムシャムシャ食べるのこの行動のいくつかの洞察力を与えてくださいことはできますか?

答えて

12

chompは、その引数を変更します。変更された引数は返されません。 2番目の例は、実際にどのように使用するのかです。

編集perldoc -f chomp言います:

chomp This safer version of "chop" removes any trailing string that 
      corresponds to the current value of $/ (also known as 
      $INPUT_RECORD_SEPARATOR in the "English" module). It returns 
      the total number of characters removed from all its arguments. 
+1

+1。より明示的に言うと、 'chomp'は1つ以上の引数を取り、必要ならばそれらを修正し、"すべての引数から削除された文字の総数を返します "。 [[link](http://perldoc.perl.org/functions/chomp.html)] – ruakh

+0

私は常にOPとして期待されるように動作する 'rchomp'があるべきだと思ってきました。私は 'chomp(my $ input = <>);'は本当に扱いにくいと思いますが、 'my $ input = rchomp <>' –

+1

私は引数を変更するこれらのCスタイルのインターフェースが嫌です。 [Text :: Chomped](http://p3rl.org/Text::Chomped)は回避策です。 – daxim

2

削除文字の数ではなく、chompされている文字列を返しますchomp

2

私はchomp()という名前が好きです。 @ruakhが言及したようあなたが言うことができますので、それは、1つ以上の引数を取ります。

chomp($str1,$str2); 
if ($str1 eq $str2) ... 

あなたはまた、例えば、それを一度にファイル全体を読んでからになるだろうどのような文字列の配列を、渡すことができる。

chomp(@lines); 
関連する問題