Разница между ==, = и eq
Я хочу знать разницу между этими:
my $a = 1;
а также
my $a == 1;
а также
my $a eq 1;
4 ответа
== используется при сравнении числовых значений.
eq используется при сравнении строковых значений.
= является оператором присваивания, а не оператором сравнения.
Последние два утверждения ничего не делают, это хорошая практика использовать директивы:
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
для проверки равенства строк, ==
это то же самое, но для численного равенства.
Вы никогда не должны видеть 2-й или 3-й примеры в любой программе Perl. Если вы это сделаете, было бы нереалистичным предположить, что оригинальный программист имел в виду что-то еще (например my $a = 1;
). Они оба будут выдавать предупреждающие сообщения, если вы используете строгую прагму и предупреждения:
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
или же $b
в качестве переменных в любой программе на Perl, поскольку они считаются специальными переменными, используемыми при сортировке. Вы можете часто сойти с рук, но лучше не связываться с ними.