in reply to file extensions

I see "search through a list to see if an item exists" and I immediately think grep:
use strict; use warnings; my $url = "http://someserver/some/file.avi"; my @quicktime_ext = qw( .sdp .rtsp .rts .mov .qt .smi .sml .smil .avi .vfw .flc.fli .wav .bwf .aiff .aif .aifc .cdda .au .snd .ulw .mid .midi .smf .kar .qcp .sd2 .amr .gsm .mpeg .meg .m2s .m1v .ma1 .m75 .m15 .mpm .mpv .mpa .3gp .3gpp .3g2 .3gp2 .mp4 .mpg4 .m4a .m4p .m4b .m4v .sdv .amc .swa .m3u .m3url .swf .fpx .fpix .dv .dif); my ($ext) = grep {$url =~ /$_$/i} @quicktime_ext and print "ok\n"; print "Extension is $ext" if ($ext);
If you are unfamiliar with grep (the Perl function, not the UNIX tool!), then by all means check the documentation. Both grep and map prove to be extremely useful once you understand them.

In short, grep sets $_ to each element of the list in turn and executes the code in curly braces. The code in question is a simple regular expression match that asks: "Does the url end with $_?" ($_ being set to one of the extension from your list, like ".avi"). Note that grep isn't necessarily more efficient than a foreach loop. grep implicitly loops over all the elements of the list.