#! /usr/bin/perl -w
use strict;
my %slice;
@slice{ qw/alpha bravo/ } = ( 'foo', 'bar' );
my %assign;
$assign{alpha} = 'foo';
$assign{bravo} = 'bar';
####
% perl bench-hslice 100000
Benchmark: timing 100000 iterations of Assign_02, Assign_16, Assign_32, Assign_64, Slice_02, Slice_16, Slice_32, Slice_64...
Assign_02: 1 wallclock secs ( 1.24 usr + 0.00 sys = 1.24 CPU)
Assign_16: 7 wallclock secs ( 6.41 usr + 0.00 sys = 6.41 CPU)
Assign_32: 14 wallclock secs (13.55 usr + 0.00 sys = 13.55 CPU)
Assign_64: 26 wallclock secs (26.34 usr + 0.00 sys = 26.34 CPU)
Slice_02: 2 wallclock secs ( 1.80 usr + 0.00 sys = 1.80 CPU)
Slice_16: 10 wallclock secs ( 9.47 usr + 0.01 sys = 9.48 CPU)
Slice_32: 19 wallclock secs (18.56 usr + 0.01 sys = 18.57 CPU)
Slice_64: 39 wallclock secs (38.43 usr + 0.00 sys = 38.43 CPU)
##
##
my %slice;
@slice{ qw/alpha bravo charlie delta/ } =
( $omega, $x, $brown, $plane );
##
##
my %slice;
@slice{
'alpha' = $omega,
'bravo' = $x,
# ...
};
##
##
my %slice;
@slice{
alpha => $omega,
bravo => $x,
# ...
};
##
##
% perl bench-hslice2 100000
Benchmark: timing 100000 iterations of Assign_02, Assign_16, Assign_32, Assign_64, Slice_02, Slice_16, Slice_32, Slice_64...
Assign_02: 1 wallclock secs ( 1.22 usr + 0.00 sys = 1.22 CPU)
Assign_16: 7 wallclock secs ( 6.61 usr + 0.00 sys = 6.61 CPU)
Assign_32: 13 wallclock secs (13.11 usr + 0.00 sys = 13.11 CPU)
Assign_64: 25 wallclock secs (26.82 usr + 0.00 sys = 26.82 CPU)
Slice_02: 0 wallclock secs ( 1.33 usr + 0.00 sys = 1.33 CPU)
Slice_16: 7 wallclock secs ( 6.57 usr + 0.00 sys = 6.57 CPU)
Slice_32: 13 wallclock secs (12.76 usr + 0.00 sys = 12.76 CPU)
Slice_64: 26 wallclock secs (26.11 usr + 0.00 sys = 26.11 CPU)
##
##
% perl hslice 100000
Benchmark: timing 100000 iterations of Assign_02, Assign_16, Assign_32, Assign_64, Slice_02, Slice_16, Slice_32, Slice_64...
Assign_02: 1 wallclock secs ( 0.68 usr + 0.00 sys = 0.68 CPU) @ 147058.82/s (n=100000)
Assign_16: 3 wallclock secs ( 3.99 usr + 0.00 sys = 3.99 CPU) @ 25062.66/s (n=100000)
Assign_32: 9 wallclock secs ( 8.40 usr + 0.01 sys = 8.41 CPU) @ 11890.61/s (n=100000)
Assign_64: 17 wallclock secs (16.61 usr + 0.03 sys = 16.64 CPU) @ 6009.62/s (n=100000)
Slice_02: 1 wallclock secs ( 0.70 usr + 0.00 sys = 0.70 CPU) @ 142857.14/s (n=100000)
Slice_16: 4 wallclock secs ( 4.21 usr + 0.00 sys = 4.21 CPU) @ 23752.97/s (n=100000)
Slice_32: 7 wallclock secs ( 8.30 usr + 0.00 sys = 8.30 CPU) @ 12048.19/s (n=100000)
Slice_64: 18 wallclock secs (16.93 usr + 0.01 sys = 16.94 CPU) @ 5903.19/s (n=100000)
##
##
% cat opcode-hslice
#! /usr/bin/perl -w
use strict;
my %h;
@h{ qw/alpha bravo/ } = ( 'foo', 'bar' );
% perl -MO=Terse opcode-hslice # 5.6.1
BINOP (0x819f8e0) aassign [2]
UNOP (0x81b3dc0) null [141]
OP (0x81a7868) pushmark
SVOP (0x819c720) const PV (0x8131440) "foo"
SVOP (0x819c740) const PV (0x8131434) "bar"
UNOP (0x81b3e00) null [141]
OP (0x81a37e8) pushmark
LISTOP (0x8126360) hslice
OP (0x81a7850) pushmark
LISTOP (0x8126060) list
OP (0x81a79e8) pushmark
SVOP (0x8126240) const PV (0x812eb8c) "alpha"
SVOP (0x81262a0) const PV (0x8124224) "bravo"
OP (0x819d128) padhv [1]
% perl -MO=Terse opcode-hslice # 5.005_03
BINOP (0x80d4f30) pp_aassign [3]
UNOP (0x80d4e00) pp_null [141]
OP (0x80d4e28) pp_pushmark
SVOP (0x8144de8) pp_const PV (0x80d1f30) "foo"
SVOP (0x80d4de0) pp_const PV (0x80d1f48) "bar"
UNOP (0x80d4ee8) pp_null [141]
OP (0x80d4f10) pp_pushmark
LISTOP (0x8144da0) pp_hslice
OP (0x8144dc8) pp_pushmark
LISTOP (0x80d5520) pp_split [2]
PMOP (0x81360b8) pp_pushre /\s+/
SVOP (0x80d54e0) pp_const PVIV (0x80d1f90) "alpha bravo"
SVOP (0x80d5500) pp_const IV (0x80d1f0c) 0
OP (0x80d54c0) pp_padhv [1]