in reply to Formatting an output with printf
print MERGE pack('A20A180A200A350',@vars);
as for the faster part (I thought it would be a bigger difference):
#!/usr/local/bin/perl use Benchmark; use strict; my $count = 10000; my @lists = map { [chr($_+65),chr($_+66),chr($_+67),chr($_+68) ] } 0.. +22; open(FH1,'>/tmp/x') or die "$!\n"; open(FH2,'>/tmp/y') or die "$!\n"; timethese ($count, { 'pack' => '&use_pack', 'printf' => '&use_printf' +} ); sub use_pack { foreach (@lists) { print FH1 pack('A20A180A200A350',@{$_}); } } sub use_printf { foreach (@lists) { printf FH2 "%-20s%-180s%-200s%-350s", @{$_} ; } }
Benchmark: timing 10000 iterations of pack, printf... pack: 21 wallclock secs (10.10 usr + 9.55 sys = 19.65 CPU) @ 50 +8.91/s (n=10000) printf: 24 wallclock secs (10.90 usr + 9.72 sys = 20.62 CPU) @ 48 +4.97/s (n=10000) Benchmark: timing 10000 iterations of pack, printf... pack: 21 wallclock secs (10.03 usr + 9.75 sys = 19.78 CPU) @ 50 +5.56/s (n=10000) printf: 23 wallclock secs (11.88 usr + 10.72 sys = 22.60 CPU) @ 44 +2.48/s (n=10000)
| Mynd you, mønk bites Kan be pretti nasti... |
|
|---|