in reply to Using $1,$2 etc in closures..

i was poking around with some code in the recent image size pure perl thread and came up with some similar code.

use strict; my @test = ( [ '^GIF8..(....)' => sub { return ( GIF => unpack("SS", $_[1]) ); }], [ '^^\xFF\xD8.{4}JFIF' => sub { return ( JPEG => unpack("nn", $1)) if ($_[0] =~ /\xFF\ +xC0...(... .)/s); }], [ '^\x89PNG\x0d\x0a\x1a\x0a' => sub { return ( PNG => unpack("NN", $1)) if ($_[0] =~ /IHDR(. +{8})/s); }], [ 'BM.{16}(.{8})' => sub { return ( BMP => unpack("LL", $_[1]) ); }], ); sub x_image_size { return unless $_[0]; foreach my $test (@test) { my @arg; return ($test->[1]($_[0], @arg)) if (@arg = $_[0] =~ / +$test->[0]/s); } }