기능 defined() 에서는 Perl

에서는 Perl 프로그래밍 언어가 내장된 기능 defined().

대부분 이 기능을 구별하는 데 사용됩 값 undef 에서 다른 값입니다. 지도의 도움으로 defined() ,배울 수 있는지 여부를 정의한 기능입니다.

체크인 undef

주요 적용 기능 defined() 은 체크인 가치에 undef.

는 경우 전송 기능 defined()undef,함수는 false 를 반환합니다. 이 기능은 반환'true'는 경우에는 값은 그것송 은 아무것도 하지만 undef. 여기에는 예제 코드:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper defined(8);
print Dumper defined(0);
print Dumper defined('');
print Dumper defined(undef);

이 코드:

$VAR1 = 1;
$VAR1 = 1;
$VAR1 = 1;
$VAR1 = '';

을 확인하는 함수가 정의

대부분의 기능 defined() 에서 사용하기 위해 구별 undef 에서 다른 값입니다. 그러나 외에 사용하 defined() 배울 수 있는지 여부를 정의한 기능입니다. 여기에는 예제 코드:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

print Dumper defined(&check);
print Dumper defined(&Data::Dumper::Dumper);

기능 check() 정의하지 않은,그래서 defined() false 를 반환합니다,그러나 기능 Dumper 번들 Data::Dumperdefined() return'true'이다. 그 어떤 이 프로그램은 화면에 표시됩니다:

$VAR1 = '';
$VAR1 = 1;

인수

는 경우 기능 defined() 주어지지 아니 인수,함수 작품과 함께 기본 변수 $_:

는 경우 전송 기능 defined() 하나 이상의 인수,그것은 오류가 프로그램 실행 중지됩니다:

Too many arguments for defined operator at script.pl line 3, near "3)"
Execution of script.pl aborted due to compilation errors.

반환 값

함수의 결과 defined() 항상 부울 값입니다. 참 또는 거짓입니다.

사용법과 배열 및 Hesham

매우 긴 기능 defined() 일에는 특별한 방법으로 당신이 그녀에게 말 배열이나 해시으로 인수입니다. 그러나 Perl5.8 이용 경고를 발표했고,이후 5.22 이용하기 시작했다 실패입니다.

여기에서 샘플 코드에는 defined() 배열로 전달되:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @arr;

print Dumper defined(@arr);

이 코드의 결과에서는 perl 버전 5.8:

defined(@array) is deprecated at script.pl line 10.
    (Maybe you should just omit the defined()?)
    $VAR1 = '';

이러한 결과는 경우 5.30perl:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at script.pl line 10.

과 같은 코드,그에 대한 해쉬:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %h;

print Dumper defined(%h);

작업의 결과에 perl5.8 및 5.30:

defined(%hash) is deprecated at script.pl line 10.
    (Maybe you should just omit the defined()?)
    $VAR1 = '';
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at script.pl line 10.

공식적인 문서

여기에 출력하는 명령의 perldoc -f defined:

       defined EXPR
       defined Returns a Boolean value telling whether EXPR has a value other
               than the undefined value "undef".  If EXPR is not present, $_
               is checked.

               Many operations return "undef" to indicate failure, end of
               file, system error, uninitialized variable, and other
               exceptional conditions.  This function allows you to
               distinguish "undef" from other values.  (A simple Boolean test
               will not distinguish among "undef", zero, the empty string, and
               "0", which are all equally false.)  Note that since "undef" is
               a valid scalar, its presence doesn't necessarily indicate an
               exceptional condition: "pop" returns "undef" when its argument
               is an empty array, or when the element to return happens to be
               "undef".

               You may also use "defined(&func)" to check whether subroutine
               &func has ever been defined.  The return value is unaffected by
               any forward declarations of &func.  A subroutine that is not
               defined may still be callable: its package may have an
               "AUTOLOAD" method that makes it spring into existence the first
               time that it is called; see perlsub.

               Use of "defined" on aggregates (hashes and arrays) is
               deprecated.  It used to report whether memory for that
               aggregate had ever been allocated.  This behavior may disappear
               in future versions of Perl.  You should instead use a simple
               test for size:

                   if (@an_array) { print "has array elements\n" }
                   if (%a_hash)   { print "has hash members\n"   }

               When used on a hash element, it tells you whether the value is
               defined, not whether the key exists in the hash.  Use "exists"
               for the latter purpose.

               Examples:

                   print if defined $switch{D};
                   print "$val\n" while defined($val = pop(@ary));
                   die "Can't readlink $sym: $!"
                       unless defined($value = readlink $sym);
                   sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
                   $debugging = 0 unless defined $debugging;

               Note:  Many folks tend to overuse "defined" and are then
               surprised to discover that the number 0 and "" (the zero-length
               string) are, in fact, defined values.  For example, if you say

                   "ab" =~ /a(.*)b/;

               The pattern match succeeds and $1 is defined, although it
               matched "nothing".  It didn't really fail to match anything.
               Rather, it matched something that happened to be zero
               characters long.  This is all very above-board and honest.
               When a function returns an undefined value, it's an admission
               that it couldn't give you an honest answer.  So you should use
               "defined" only when questioning the integrity of what you're
               trying to do.  At other times, a simple comparison to 0 or ""
               is what you want.

               See also "undef", "exists", "ref".

관련 주제

다른 기사