C:\Perl64\packages>gunzip Readonly-XS-1.05.tar.gz
C:\Perl64\packages>tar -xvf Readonly-XS-1.05.tar
Readonly-XS-1.05/
Readonly-XS-1.05/Changes
Readonly-XS-1.05/Makefile.PL
Readonly-XS-1.05/MANIFEST
Readonly-XS-1.05/META.yml
Readonly-XS-1.05/ppport.h
Readonly-XS-1.05/README
Readonly-XS-1.05/t/
Readonly-XS-1.05/t/test.t
Readonly-XS-1.05/XS.pm
Readonly-XS-1.05/XS.xs
C:\Perl64\packages>cd Readonly-XS-1.05
C:\Perl64\packages\Readonly-XS-1.05>makefile
Checking if your kit is complete...
Looks good
Writing Makefile for Readonly::XS
C:\Perl64\packages\Readonly-XS-1.05>nmake
Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
cp XS.pm blib\lib\Readonly\XS.pm
C:\perl64\bin\perl.exe C:\Perl64\lib\ExtUtils\xsubpp -typemap C:\Perl64\lib\ExtUtils\typemap XS.xs > XS.xsc && C:\perl
cl -c -I. -nologo -GF -W3 -MD -Zi -DNDEBUG -Ox -GL -fp:precise -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DWIN6
XS.c
Running Mkbootstrap for Readonly::XS ()
C:\perl64\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644 XS.bs
C:\perl64\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NAME'=>\"Readonly::XS\", 'DLBASE' => 'XS', 'DL_FUNCS' =>
link -out:blib\arch\auto\Readonly\XS\XS.dll -dll -nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"C:\Perl64\li
Creating library blib\arch\auto\Readonly\XS\XS.lib and object blib\arch\auto\Readonly\XS\XS.exp
Generating code
Finished generating code
if exist blib\arch\auto\Readonly\XS\XS.dll.manifest mt -nologo -manifest blib\arch\auto\Readonly\XS\XS.dll.manifest -out
if exist blib\arch\auto\Readonly\XS\XS.dll.manifest del blib\arch\auto\Readonly\XS\XS.dll.manifest
C:\perl64\bin\perl.exe -MExtUtils::Command -e "chmod" -- 755 blib\arch\auto\Readonly\XS\XS.dll
C:\perl64\bin\perl.exe -MExtUtils::Command -e "cp" -- XS.bs blib\arch\auto\Readonly\XS\XS.bs
C:\perl64\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644 blib\arch\auto\Readonly\XS\XS.bs
C:\Perl64\packages\Readonly-XS-1.05>nmake test
Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
C:\perl64\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/test.t .. ok
All tests successful.
Files=1, Tests=10, 0 wallclock secs ( 0.06 usr + 0.06 sys = 0.13 CPU)
Result: PASS
C:\Perl64\packages\Readonly-XS-1.05>nmake install
Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
Files found in blib\arch: installing files in blib\lib into architecture dependent library tree
Installing C:\Perl64\site\lib\auto\Readonly\XS\XS.bs
Installing C:\Perl64\site\lib\auto\Readonly\XS\XS.dll
Installing C:\Perl64\site\lib\auto\Readonly\XS\XS.exp
Installing C:\Perl64\site\lib\auto\Readonly\XS\XS.lib
Installing C:\Perl64\site\lib\auto\Readonly\XS\XS.pdb
Installing C:\Perl64\site\lib\Readonly\XS.pm
Appending installation info to C:\Perl64\lib/perllocal.pod
####
#! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use constant {
TRUE => 1,
FALSE => 0,
VALUE => 12345,
};
use Readonly;
Readonly::Scalar my $true => 1;
Readonly::Scalar my $false => 0;
Readonly::Scalar my $value => 12345;
sub usingConstant {
for( 1 .. 1e6 ) {
if( TRUE ) {
my $sum = VALUE * VALUE;
}
if( FALSE ) {
;## Never called
}
}
}
sub usingLiterals {
for( 1 .. 1e6 ) {
if( 1 ) {
my $sum = 12345 * 12345;
}
if( 0 ) {
;## Never called
}
}
}
sub usingReadonly {
for( 1 .. 1e6 ) {
if( $true ) {
my $sum = $value * $value;
}
if( $false ) {
;## Never called
}
}
}
cmpthese -1, {
const => sub{ usingConstant() },
literals => sub{ usingLiterals() },
Readonly => sub{ usingReadonly() },
};
####
c:\test>ROvCONST.pl
Rate Readonly literals const
Readonly 4.06/s -- -44% -49%
literals 7.21/s 78% -- -9%
const 7.90/s 95% 10% --