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;
The last two statements do nothing, it's a good practice to use the directives:
use warnings;
use strict;
for example:
#!/usr/bin/perl
use warnings;
use strict;
my $a == 1;
my $b eq 1;
print "$a $b\n";
you should see some warning such as:
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.
You should never see the 2nd or 3rd examples in any perl program. If you do, it would not be farfetched to assume the original programmer meant something else (like my $a = 1;
). Those would both give warning messages if you were were using the strict and warnings pragmas:
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.
You should also try to stay away from using $a
or $b
as variables in any perl program as these are considered special variables used when sorting. You can often get away with it, but it's best not to mess around with them.
== is used when comparing numeric values.
eq is used in comparing string values.
= is the assignment operator, not a comparison operator.