my $line = "hello";
print ($line == undef);
$ line이 정의되지 않았기 때문에 검사는 거짓이어야합니다 (첫 번째 줄에서 정의했습니다). 이 코드 조각이 '1'을 인쇄하는 이유는 무엇입니까?이 문자열 undef가 true를 반환하는 이유는 무엇입니까?
my $line = "hello";
print ($line == undef);
$ line이 정의되지 않았기 때문에 검사는 거짓이어야합니다 (첫 번째 줄에서 정의했습니다). 이 코드 조각이 '1'을 인쇄하는 이유는 무엇입니까?이 문자열 undef가 true를 반환하는 이유는 무엇입니까?
당신이 말한 정확히하고있어. ($line == undef)
부울 문이기 때문에
print ($line == undef);
당신은 부울 값을 인쇄하고 있습니다.
==
은 이고, 수치는입니다. $line
은 텍스트이므로 0
값을가집니다. 숫자도 undef
입니다. 따라서 ($line == undef)
이 참입니다.
당신은 항상 당신의 프로그램의 상단에 다음 넣어해야합니다
use strict;
use warnings;
사람들이 넣어 다른 프라 그마있다, 그러나 이들은 가장 중요한 두 가지입니다. 그들은 당신의 오류의 90 %를 발견 할 것입니다. 이 프로그램을 시도해보십시오
use strict;
use warnings;
my $line = "hello";
print ($line == undef)
당신은 얻을 것이다 : 물론
Use of uninitialized value in numeric eq (==) at ./test.pl line 6.
Argument "hello" isn't numeric in numeric eq (==) at ./test.pl line 6.
내가 초기화되지 않은 값이! undef
을 사용하고 있습니다. 그리고 물론 hello
은 숫자가 아닙니다.
나는 당신이 원하는 것을 완전히 모릅니다. hello
이 정의되어 있지 않으면 인쇄 하시겠습니까? 그 부울 성명서의 가치를 보려고합니까?
\n
은 결국 print
이 줄 끝까지 오지 않습니다. 너 저걸 원하니? print
는 잊어 \n
에러 경향이있을 수 있기 때문에, I는 say
을 선호 :
use strict;
use warnings;
use feature qw(say); # Say is like print but includes the ending `\n`
my $line = "hello";
say (not defined $line); # Will print null (false) because the line is defined
say (defined $line); # Will print "1" (true).
say ($line ne undef); # Will print '1' (true), but will give you a warning.
say $line if defined line; # Will print out $line if $line is defined
의
와우는 매우 상세했습니다. 고마워. – santi
항상
use strict; use warnings;
또는
을 넣어use Modern::Perl;
당신은 몇 가지 오류를 볼 수
:
print "variable defined" if defined $variable;
:
Use of uninitialized value in numeric eq (==) at /tmp/sssl.pl line 3.
Argument "hello" isn't numeric in numeric eq (==) at /tmp/sssl.pl line 3.
이 변수가 정의되어있는 경우, 사용을 테스트하려면 다른 문자열에 대한 문자열을 테스트하려면
는 사용
if ($string eq $another_string) { ... }
아! 감사합니다. 자바에서 null을 사용할 때 undef를 사용할 수 있다고 생각했습니다. – santi
중복 가능성 [== 차이 = 및 EQ (http://stackoverflow.com/questions/18396049/difference -between-and-eq) – mob