Разница между ==, = и 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, поскольку они считаются специальными переменными, используемыми при сортировке. Вы можете часто сойти с рук, но лучше не связываться с ними.

Другие вопросы по тегам