in reply to tidyhome

I would make two suggestions regarding this chunk:
my @list = glob("$home/*.$type"); foreach my $file (@list) { my $result = `mv $file $home/$basedir/$key`; } $type = uc($type); @list = glob("$home/*.$type"); foreach $file (@list) { $result = `mv $file $home/$basedir/$key`; }
First, there's a lot of repetition there that can be removed by setting your @list variable to the "concatenation" of the lists returned by the glob. Second, you grab $result but you never check whether the move was successful! I'd think about rewriting the chunk above as:
foreach my $file (glob("$home/*.$type"), glob("$home/*.\U$type")) { system('mv', $file, "$home/$basedir/$key") == 0 or warn "Could not move $file: $!"; }
(the \U modifier does the uc translation within double quoted strings).

Also, you could do to a test for existence of directories (-d $dirname, I believe) and create those on the fly rather than forcing their existence beforehand, something like

system('mkdir', '-p', "$home/$basedir/$key") unless -d "$home/$basedir/$key";
Here I presume a *nix environment, which seems likely given your earlier use of 'mv'. Natch, you should test the return value of that system call, too....

Replies are listed 'Best First'.
Re: Re: tidyhome
by salvadors (Pilgrim) on Dec 31, 2000 at 03:26 UTC
    Or, you could use the builtin rename and mkdir functions ...

    Tony

Re: Re: tidyhome
by Anonymous Monk on Jan 21, 2001 at 00:06 UTC
    Indeedy - I'll be updating the script soon. It's more 'perlie' now, creates the directories if the don't exist, and also checks for permission/symlink problems. Billy.