I want to know the difference between these:
my $a = 1;
and
my $a == 1;
and
my $a eq 1;
I want to know the difference between these:
my $a = 1;
and
my $a == 1;
and
my $a eq 1;
==は、数値を比較するときに使用されます。
eqは、文字列値の比較に使用されます。
=は比較演算子ではなく代入演算子です。
最後の 2 つのステートメントは何もしません。ディレクティブを使用することをお勧めします。
use warnings;
use strict;
例えば:
#!/usr/bin/perl
use warnings;
use strict;
my $a == 1;
my $b eq 1;
print "$a $b\n";
次のような警告が表示されるはずです。
Useless use of numeric eq (==) in void context at main.pl line 5.
Useless use of string eq in void context at main.pl line 6.
Use of uninitialized value $a in numeric eq (==) at main.pl line 5.
Use of uninitialized value $b in string eq at main.pl line 6.
Use of uninitialized value $a in concatenation (.) or string at main.pl line 8.
Use of uninitialized value $b in concatenation (.) or string at main.pl line 8.
eq
は文字列の等価性をテストするため==
のもので、数値の等価性を除いて同じことです。
どの perl プログラムでも、2 番目または 3 番目の例は決して見るべきではありません。もしそうなら、元のプログラマーが何か別のことを意味していると仮定するのは大げさではありません ( などmy $a = 1;
)。strict および warnings プラグマを使用していた場合、これらは両方とも警告メッセージを表示します。
use strict;
use warnings;
my $a == 1;
# ==> Useless use of numeric eq (==) in void context at -e line 3.
# ==> Use of uninitialized value $a in numeric eq (==) at -e line 3.
$a
また、perl プログラムでor$b
を変数として使用しないようにしてください。これらは、ソート時に使用される特別な変数と見なされるからです。多くの場合、それを回避できますが、それらをいじらないことをお勧めします.