For those of you that are interested, I benchmarked a few of the suggestions. Drieux is by a significant margin the winner speed-wise. What I did was split the scalar into an array and then define the four variables by join()ing the result using an array slice instead of making a new array. Running this code, cutting out the print statements:
################################################### use strict; use warnings; use Benchmark; my $mine = timethese(1000000, {Mine => sub{ my $string = '0.0.0.0.1.10.1.30.1.10.1.30.1'; my @nums = split(/\./,$string); my $first = join('.',@nums[0..3]); my $second = $nums[4]; my $third = join('.',@nums[5..8]); my $fourth = join('.',@nums[9..12]); },Drieux => sub{ my $input = '0.0.0.0.111.10.1.30.1.10.1.30.1 '; my $dot_quad = qr/\d+\.\d+\.\d+\.\d+/; my ($im, $jm , $km, $mm ) = $input =~ /($dot_quad)\.(\d+)\.($dot_quad)\.($dot_quad)/; },Wags => sub{ $_ = '0.0.0.0.1.10.1.30.1.10.1.30.1'; my @MyWorka = (); @MyWorka = split(/\./, $_); my @MyWorkb = (); my @MyWorkc = (); my @MyWorkd = (); @MyWorkb = splice(@MyWorka,-4,4); @MyWorkc = splice(@MyWorka,-4,4); @MyWorkd = splice(@MyWorka,-1,1); }}); ##################################################### Gave me this result: Benchmark: timing 1000000 iterations of Drieux, Mine, Wags... Drieux: 9 wallclock secs ( 8.16 usr + 0.00 sys = 8.16 CPU) @ 122518.99/s (n=1000000) Mine: 12 wallclock secs (11.76 usr + 0.00 sys = 11.76 CPU) @ 85055.71/s (n=1000000) Wags: 14 wallclock secs (14.53 usr + 0.00 sys = 14.53 CPU) @ 68818.39/s (n=1000000) -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>