#!/usr/bin/env perl use strict; use warnings; use Benchmark 'cmpthese'; cmpthese(-30, { loop => \&loop, assign => \&assign, }); my $BUFFER; sub loop { $BUFFER .= '12345'; say $BUFFER while parse(\$BUFFER); } sub assign { my $buffer = \($BUFFER .= '12345'); 1 while parse($buffer); } sub parse { my $buffer = shift; return substr ${$buffer}, 0, 1, ''; }