#!/usr/bin/perl use warnings; use strict; my @search = qw( group1 group2 group11 ); my $regex = join '|', sort { length $b <=> length $a } @search; $regex = qr/($regex)/; while (<>) { if (my ($found) = /$regex/) { print STDERR "Moving $ARGV into $found\n"; -d $found or mkdir $found or die $!; rename $ARGV, "$found/$ARGV" or die $!; } }