#!/usr/bin/perl -w
use strict;
use Time::HiRes qw( gettimeofday tv_interval );
{
for (
['i++','for ( i = 0; i < 100000000; i++){ a = i }'],
['i = i + 1','for ( i = 0; i < 100000000; i = i + 1){ a = i }'],
['cat " and " dog','cat = "cat" ; dog = "dog"; for ( i = 0; i < 100000000; i = i + 1){ a = cat " and " dog }'],
['sprintf','cat = "cat" ; dog = "dog"; for ( i = 0; i < 100000000; i = i + 1){ a = sprintf("%s and %s",cat,dog) }'],
) {
my ( $name,$code) = @{ $_ };
if ( fork) {
my @t_a;
$SIG{'TERM'} = sub { push( @t_a,[gettimeofday]) };
wait;
printf("%-20s %g\n",$name,tv_interval( $t_a[0],$t_a[1]));
} else {
sleep( 1);
exec(
'gawk',
# '-O',
'--source',
join(
'',
'BEGIN { kill = "kill " PROCINFO["ppid"]; system( kill);',
$code,
'system( kill);}',
),
);
}
}
}
IyEvdXNyL2Jpbi9wZXJsIC13CnVzZSBzdHJpY3Q7CnVzZSBUaW1lOjpIaVJlcyBxdyggZ2V0dGltZW9mZGF5IHR2X2ludGVydmFsICk7Cgp7CiAgZm9yICgKICAgIFsnaSsrJywnZm9yICggaSA9IDA7IGkgPCAxMDAwMDAwMDA7IGkrKyl7IGEgPSBpIH0nXSwKICAgIFsnaSA9IGkgKyAxJywnZm9yICggaSA9IDA7IGkgPCAxMDAwMDAwMDA7IGkgPSBpICsgMSl7IGEgPSBpIH0nXSwKICAgIFsnY2F0ICIgYW5kICIgZG9nJywnY2F0ID0gImNhdCIgOyBkb2cgPSAiZG9nIjsgZm9yICggaSA9IDA7IGkgPCAxMDAwMDAwMDA7IGkgPSBpICsgMSl7IGEgPSBjYXQgIiBhbmQgIiBkb2cgfSddLAogICAgWydzcHJpbnRmJywnY2F0ID0gImNhdCIgOyBkb2cgPSAiZG9nIjsgZm9yICggaSA9IDA7IGkgPCAxMDAwMDAwMDA7IGkgPSBpICsgMSl7IGEgPSBzcHJpbnRmKCIlcyBhbmQgJXMiLGNhdCxkb2cpIH0nXSwKICAgKSB7CiAgICBteSAoICRuYW1lLCRjb2RlKSA9IEB7ICRfIH07CiAgICBpZiAoIGZvcmspIHsKICAgICAgbXkgQHRfYTsKICAgICAgJFNJR3snVEVSTSd9ID0gc3ViIHsgcHVzaCggQHRfYSxbZ2V0dGltZW9mZGF5XSkgfTsKICAgICAgd2FpdDsKICAgICAgcHJpbnRmKCIlLTIwcyAlZ1xuIiwkbmFtZSx0dl9pbnRlcnZhbCggJHRfYVswXSwkdF9hWzFdKSk7CiAgICB9IGVsc2UgewogICAgICBzbGVlcCggMSk7CiAgICAgIGV4ZWMoCgknZ2F3aycsCgkjCSctTycsCgknLS1zb3VyY2UnLAoJam9pbigKCSAgJycsCgkgICdCRUdJTiB7IGtpbGwgPSAia2lsbCAiIFBST0NJTkZPWyJwcGlkIl07IHN5c3RlbSgga2lsbCk7JywKCSAgJGNvZGUsCgkgICdzeXN0ZW0oIGtpbGwpO30nLAoJICksCiAgICAgICApOwogICAgfQogIH0KfQo=