Perl에서 문자열이 비어 있는지 확인하는 적절한 방법은 무엇입니까?


94

이 코드를 사용하여 문자열이 비어 있는지 확인했습니다.

if ($str == "")
{
  // ...
}

같지 않음 연산자도 마찬가지입니다.

if ($str != "")
{
  // ...
}

이것은 작동하는 것처럼 보이지만 (내 생각에) 올바른 방법인지 또는 예기치 않은 단점이 있는지 확실하지 않습니다. 뭔가 옳지 않다고 생각합니다.

답변:


133

Perl에서 문자열을 비교하려면 eq또는 사용하십시오 ne.

if ($str eq "")
{
  // ...
}

==!=운영자는 숫자 비교 연산자. 두 피연산자를 비교하기 전에 두 피연산자를 정수로 변환하려고 시도합니다.

자세한 내용은 perlop man 페이지를 참조하십시오.


예, 이것을 사용하면 undef이면주의해야하며 경고를 사용하는 경우 런타임 경고가 표시됩니다. 하지만 경고를 피하는 방법은 여러 가지입니다.
Evan Carroll

89
  1. 문자열이 Perl에 저장되는 방식으로 인해 문자열 길이를 가져 오는 것이 최적화됩니다.
    if (length $str)문자열이 비어 있지 않은지 확인하는 좋은 방법입니다.

  2. 아직에 대해 보호하지 않은 상황에있는 경우 undef경고하지 않는 "비어 있지 않은"항목은 if (defined $str and length $str).


6
길이는 문자열에 아무것도 없다는 생각의 표현에 가장 가까운 테스트라고 생각합니다.
brian d foy 2010 년

6
if (length($str))좋은 접근 방식이며 변수가 정의되지 않은 경우 실패하지 않기 때문에 찬성되었습니다 .
basic6

10

"=="대신 "eq"를 사용하고 싶을 것입니다. 일부 예외적 인 경우에 대해 걱정하는 경우 정의되지 않은 항목도 확인해야 할 수 있습니다.

if (not defined $str) {

# this variable is undefined

}

1
0 요소를 가질 수있는 배열을 이동하여 문자열을 얻을 때 매우 유용합니다.
Dacav

9

이미 여러 사람이 언급했듯이 eq 했듯이은 여기에서 올바른 연산자입니다.

use warnings;스크립트에있는 경우 이에 대한 경고 (및 기타 많은 유용한 정보)가 표시됩니다. 나도 추천 use strict;합니다.


+1 Cool, 예, 일반적으로 사용 use strict하지만 이전 코드를 업데이트하고 있으므로 이것을 추가하면 수백 개의 오류가 발생합니다. 아마도 언젠가 고칠 것입니다.
Nick Bolton

4

CPAN을 사용하는 것 외에 어떤 일을하는 "적절한"방법이라는 개념은 Perl에 존재하지 않습니다.

어쨌든 그것들은 숫자 연산자입니다.

if($foo eq "")

또는

if(length($foo) == 0)

3
Perl이 문제 해결을 위해 "하나의 진정한 방법"을 옹호하지 않는 것은 사실이지만, 그렇다고 강력하게 선호하는 관용구와 스타일 및 접근 방식이 없다는 의미는 아닙니다. 또한 Perl 단골 직원 중 한 명이 말을 많이하기를 좋아하기 때문에 일을 할 수 있는 방법이 여러 가지 가 있더라도 일을하는 어떤 방법은 정말, 정말 나쁩니다 (어리 석고, 잘못 조언하고, 유지하기 어려운 등) .)
Telemachus

2
할 수있는 방법이 많다고해서 모든 방법이 동등하다는 의미는 아닙니다. 사용하여 빈 문자열을 테스트 if ($foo == "")예를 들어,이다 결정적 잘못 하지 않는 한 여부를 테스트 할 실제로 평균 $foo(이 경우에는 것, 0의 값이 숫자 맥락에서 평가, 여전히 더 잘 쓸 수 if ($foo == 0)즉 더 명확하게 표현으로, 당신의 의지).
Dave Sherohman

0

빈 문자열을 확인하려면 다음과 같이 할 수도 있습니다.

if (!defined $val || $val eq '')
{
    # empty
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.