there is no mention of this valriable like %hashCellID / %hashCellnamePerl, by default, will create variables as you use them:
$cellname = 'fred';
$hashCellname{$cellname}++;
local $, = ' ';
print %hashCellname,"\n";
will create %hashCellname and gives:
fred 1
However, this can cause problems - your confusion is a good example! Fortunately there is a fix, to always
use strict;
use warnings;
Now the hash has to be explicitly created:
use strict;
use warnings;
my %hashCellname;
my $cellname = 'fred';
$hashCellname{$cellname}++;
local $, = ' ';
print %hashCellname,"\n";
Now it is clear where %hashCellname came from.
I have code like $hashSmsCnt{$lv}++. The prefix character (
sigil) $ here does not mean that hashSmsCnt is a scalar, it means that the key inside { } is in scalar context. It is the braces { } which indicate that hashSmsCnt is a hash, not the first character (square brackets
indicate an array). If you had a list of keys inside { } then the first character would be @, but hashSmsCnt would still be a hash.