機能 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() 戻る'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() は常にBoolean値です。 Trueまたはfalseです。

使用すると配列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".

関連する話題

その他の記事