The print is buffered, so only generates a system call when the buffer is full. My template is small and the buffer size is larger than it, so I only have one system call for the entire template.
#!/usr/bin/perl
for(my $i=0;$i<4000;$i++)
{
print $i%10;
}
$ strace -c -e write /tmp/t20 >/tmp/out
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000034 34 1 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.000034 1 total