1#!/usr/bin/perl 2 3# Very simple benchmark script to show how slow Readonly.pm is, 4# and how Readonly::XS solves the problem. 5 6use strict; 7use Readonly; 8use Benchmark; 9 10use vars qw/$feedme/; 11 12# 13# use constant 14# 15use constant CONST_LINCOLN => 'Fourscore and seven years ago...'; 16sub const 17{ 18 $feedme = CONST_LINCOLN; 19} 20 21# 22# literal constant 23# 24sub literal 25{ 26 $feedme = 'Fourscore and seven years ago...'; 27} 28 29# 30# typeglob constant 31# 32use vars qw/$glob_lincoln/; 33*glob_lincoln = \ 'Fourscore and seven years ago...'; 34sub tglob 35{ 36 $feedme = $glob_lincoln; 37} 38 39# 40# Normal perl read/write scalar 41# 42use vars qw/$norm_lincoln/; 43$norm_lincoln = 'Fourscore and seven years ago...'; 44sub normal 45{ 46 $feedme = $norm_lincoln; 47} 48 49# 50# Readonly.pm with Readonly::XS 51# 52use vars qw/$roxs_lincoln/; 53Readonly::Scalar $roxs_lincoln => 'Fourscore and seven years ago...'; 54sub roxs 55{ 56 $feedme = $roxs_lincoln; 57} 58 59# 60# Readonly.pm w/o Readonly::XS 61# 62use vars qw/$ro_lincoln/; 63{ 64 local $Readonly::XSokay = 0; # disable XS 65 Readonly::Scalar $ro_lincoln => 'Fourscore and seven years ago...'; 66} 67sub ro 68{ 69 $feedme = $ro_lincoln; 70} 71 72 73my $code = 74{ 75 const => \&const, 76 literal => \&literal, 77 tglob => \&tglob, 78 normal => \&normal, 79 roxs => \&roxs, 80 ro => \&ro, 81}; 82 83unless ($Readonly::XSokay) 84{ 85 print "Readonly::XS module not found; skipping that test.\n"; 86 delete $code->{roxs}; 87} 88 89timethese(2_000_000, $code); 90