my $line = "hello";
print ($line == undef);
$line は未定義ではないため、チェックは false である必要があります (最初の行で定義しました)。このコード スニペットが「1」を出力するのはなぜですか?
いつも入れる
use strict; use warnings;
また
use Modern::Perl;
いくつかのエラーが表示されます:
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.
変数が定義されているかどうかをテストするには、次を使用します。
print "variable defined" if defined $variable;
文字列を別の文字列に対してテストするには、次を使用します。
if ($string eq $another_string) { ... }
それはあなたが言ったことを正確にやっています。
print ($line == undef);
はブール値であるため、ブール値を出力しています($line == undef)
。
は数値==
の等号です。はテキストなので、値はです。数値的にもそうです。このように真です。$line
0
undef
($line == undef)
プログラムの一番上に、常に次のものを配置する必要があります。
use strict;
use warnings;
人々が入れたプラグマは他にもありますが、これらは最も重要な 2 つです。彼らはあなたのエラーの 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
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