Kevin Pfeiffer wrote: > Hi all, > > I just took another look at an exercise I wrote a couple months ago and > fleshed it out a bit. It is a commandline "trashcan" program which I > actually use. Instead of typing 'rm' I almost always use 'rmm' now. > > It's meant to be used in a "friendly" environment, nonetheless, if anyone > sees any potentials for error (or suggestions for better work) please say > so... >
i didn't read your whole script, only the first 20 lines or so and i have a few suggestions: 1. you have: if ($ARGV[0] =~ /^-(.)$/) { can your program handle files starting with a '-'? it's legal in *nix for file names to begin with a '-': [panda]$ touch ./-abcd [panda]$ ls -l ./-abcd -rw-r--r-- 1 dzhuo dzhuo 0 Oct 24 16:13 ./-abcd [panda]$ rm -f ./-abcd i understand that you can still supply files to rmm starting with '-' like: [panda]$ rmm ./-remove-this-file [panda]$ rmm /home/dzhuo/-remove-this-file but i think it's still nice (maybe) to be able to just: [panda]$ rmm -remove-this-file 2. you have: ($trash_dir) or die "Error: No trash directory defined!\n"; which means you will not allow user to name his/her trash directory '0'? for a general utility program like your rmm, you should relax this restriction. btw, $trash_dir is hard coded in your script so how can it ever be false? 3. you have: $path =~ /.*\..+$/ or die "Name of trash directory must begin with a dot followed by one or more letters!\n"; your regex does not match your die message. 4. you have: unless (-e $path) { print "Creating trash directory: $path\n"; mkdir $path or die "Couldn't create $path: $!\n"; } don't do this for a general utility program where your program might be involved very often from different scripts. you have a race condition. do something similar to the following instead: [panda]$ perl -MErrno -e 'die $! unless(mkdir('foo') || $!{EEXIST});' [panda]$ 5. see if Getopt::Std (and friends) can help you simplify your arg parsing code. 6. see if Fild::Find can help you simplify some of your dir scanning code. 7. it will be nice to set a limit on how big your trash dir can be. otherwise, it's easy for people to give putting stuff into it and forget about how big it has grown to. if i have time, i will check the whole script for you. david -- $_=q,015001450154015401570040016701570162015401440041,,*,=*|=*_,split+local$"; map{~$_&1&&{$,<<=1,[EMAIL PROTECTED]||3])=>~}}0..s~.~~g-1;*_=*#, goto=>print+eval -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]