#!/usr/bin/perl -w
use strict;
{
my @result_a = ( [qw( element before after diff )] );
foreach my $elem (
'1',
'i',
'sprintf("%d",i)',
'sprintf("%d",i) + 0',
'sprintf("%d",i) ""',
) {
my $source = "function cb( i){ return $elem;}";
open( my $fh,'-|','gawk','--source',$source,'-f','b.awk') || die( $!);
my @r_a = <$fh>;
my ( $before,$after) = map { ( split(' ',$r_a[$_]))[1] } 1,3;
push( @result_a,[$elem,$before,$after,$after - $before]);
}
printf("%-25s %7s %7s %7s\n",@{ $_ }) foreach @result_a;
}
# b.awk
function do_ps(){ system("ps p $PPID o pid,sz,args") }
BEGIN {
do_ps();
for ( i = 0; i < 1000000; i++){ a[i] = cb(i) }
do_ps();
}
IyEvdXNyL2Jpbi9wZXJsIC13CnVzZSBzdHJpY3Q7CnsKICBteSBAcmVzdWx0X2EgPSAoIFtxdyggZWxlbWVudCBiZWZvcmUgYWZ0ZXIgZGlmZiApXSApOwogIGZvcmVhY2ggbXkgJGVsZW0gKAogICAgJzEnLAogICAgJ2knLAogICAgJ3NwcmludGYoIiVkIixpKScsCiAgICAnc3ByaW50ZigiJWQiLGkpICsgMCcsCiAgICAnc3ByaW50ZigiJWQiLGkpICIiJywKICAgKSB7CiAgICBteSAkc291cmNlID0gImZ1bmN0aW9uIGNiKCBpKXsgcmV0dXJuICRlbGVtO30iOwogICAgb3BlbiggbXkgJGZoLCctfCcsJ2dhd2snLCctLXNvdXJjZScsJHNvdXJjZSwnLWYnLCdiLmF3aycpIHx8IGRpZSggJCEpOwogICAgbXkgQHJfYSA9IDwkZmg+OwogICAgbXkgKCAkYmVmb3JlLCRhZnRlcikgPSBtYXAgeyAoIHNwbGl0KCcgJywkcl9hWyRfXSkpWzFdIH0gMSwzOwogICAgcHVzaCggQHJlc3VsdF9hLFskZWxlbSwkYmVmb3JlLCRhZnRlciwkYWZ0ZXIgLSAkYmVmb3JlXSk7CiAgfQogIHByaW50ZigiJS0yNXMgICU3cyAlN3MgJTdzXG4iLEB7ICRfIH0pIGZvcmVhY2ggQHJlc3VsdF9hOwp9CgojIGIuYXdrCgpmdW5jdGlvbiBkb19wcygpeyBzeXN0ZW0oInBzIHAgJFBQSUQgbyBwaWQsc3osYXJncyIpIH0KQkVHSU4gewogZG9fcHMoKTsKIGZvciAoIGkgPSAwOyBpIDwgMTAwMDAwMDsgaSsrKXsgYVtpXSA9IGNiKGkpIH0KIGRvX3BzKCk7Cn0K