2012-02-14 1 views
3

chomp의 이상한 동작이 Perl에서 발견되어서 chomp가 왜 이렇게 작동 하는지를 이해할 수 없습니다. 다음은chomp in perl이 예상대로 작동하지 않습니다.

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

당신이 씹는의 행동에 약간의 통찰력을 제공시겠습니까 잘 작동하지만

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

을 예상대로

다음 줄은 작동하지 않는 이유는 무엇입니까?

답변

12

chomp은 인수를 수정합니다. 수정 된 인수를 반환하지 않습니다. 두 번째 예제는 실제로 어떻게 사용해야하는지 보여줍니다.

편집 : 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'는 하나 이상의 인수를 취하고, 필요하다면 수정하고, "모든 인수에서 제거 된 총 문자 수를 반환합니다". [[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 제거 문자의 수,하지 chomped되었습니다 한 문자열을 반환합니다.

2

저는 chomp()라는 이름을 좋아해요. 그것이 무엇을하는지 알려줍니다. @ruakh 언급으로 하나 개 이상의 인수를, 그래서 당신은 말할 수 :

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

당신은 또한 예를 들어, 한 번에 전체 파일을 읽는에서 얻을 것이 무엇처럼, 그것을 문자열 배열을 손으로 할 수 있습니다

chomp(@lines); 
관련 문제