[Chicago-talk] Two Perl curiosities

Andy Lester andy at petdance.com
Tue May 19 11:12:27 PDT 2015

> I meant to type "delta" but I typed "b".  Shouldn't Perl throw an error
> because of the strict pragma or at least a warning? I get no warnings
> when I "perl -c" and when running, all the warning I get is that $b is
> uninitialized.  When I create a small test script with this kind of
> error, I get a warning: "Name "main::b" used only once: possible typo at
> ./test.pl line 11."

$a and $b are always declared behind the scenes because they are special variables with special meaning to the sort() function.  You can have custom comparison functions for sort() and those functions use $a and $b for the two items to compare.

Like this:

my @names = qw( Moe Larry Curly );
my @sorted_names = sort &case_insensitive @names;
sub case_insensitive {
    return lc($a) cmp lc($b);

$a and $b aren’t passed in to the function.  They just exist.  So that’s why your typo didn’t fire a warning.

Andy Lester => www.petdance.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/chicago-talk/attachments/20150519/c109d996/attachment.html>

More information about the Chicago-talk mailing list