in reply to Not getting this assignment ...

there is no mention of this valriable like %hashCellID / %hashCellname

Perl, 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.