#!/usr/bin/perl use File::Basename; use strict; my @files = ( 'http://server.com/subdir/index.html', 'http://server.com/subdir/dist.tar.gz', 'http://server.com/whatever.cgi?testing=1', 'ftp://server.com/pub/whatever.zip', 'file://local/subdir/testing.txt', ); foreach my $file ( @files ){ my $suffix = ( fileparse( $file, '\..*$' ) )[2]; $suffix =~ s/(\.?[^.?]*)?\?.*?$/$1/; print $suffix, "\n"; }