There's no difference. Both declare a hash with zero key/value pairs:
$ perl -Mstrict -Mwarnings -E ' my %x; say scalar keys %x; say scalar values %x; my %y = (); say scalar keys %y; say scalar values %y; ' 0 0 0 0
Including an assignment has some overhead: typically negligible but may be significant in looping code.
#!/usr/bin/env perl use strict; use warnings; use Benchmark qw{cmpthese}; cmpthese -1 => { no_assignment => sub { my %hash }, assignment => sub { my %hash = () }, };
Output:
Rate assignment no_assignment assignment 6672755/s -- -60% no_assignment 16770827/s 151% --
I wouldn't necessarily consider one form to be "more correct" than the other.
I generally use the "my %hash_data;" form.
[Minor Update: I removed "use autodie;" from the benchmark code as it wasn't necessary (it was an artefact from the last use of this script which I often rework for example code); retested; much the same results.]
-- Ken
In reply to Re: Is there a difference in this declaration?
by kcott
in thread Is there a difference in this declaration?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |