I'll probably be battered for general poor perlmanship but still risking posting my whole script (fairly brief).
The problem I'm having with it, that I don't see how to debug is that it breaks out on code inside Find.pm instead of breaking out on the if clause designed to catch the advent of user forgetting to supply a target directory. The `if (!@ARGV) {[...] bleh; exit}' thing. I'm pretty sure it is some other bit in there causing the grief but I don't understand what. Only thing I did to debug was to make sure `use File::Find; comes after if (!@ARGV), but that seems not to matter. If I run the script below without supplying a directory target I see: rmti.pl invalid top directory at /usr/share/perl/5.20/File/Find.pm line 472. ------- ------- ---=--- ------- ------- #!/usr/bin/perl use strict; use warnings; if (!@ARGV) { usage(); print "At least one directory name is required\n"; print "Usage tripped: line: <" . __LINE__ . ">\n"; exit; } elsif ($ARGV[0] eq "help") { usage(); print "Usage tripped: line: <" . __LINE__ . ">\n"; } my $myscript; ($myscript = $0) =~ s/^.*\///; ## BEGIN GETOPTS SECTION ========================================= # [HP 12/03/07_20:31:55 Don't use `use vars' anymore ] our ($opt_f); use Getopt::Std; my $optstr = "f"; getopts($optstr); my $FORCE; # expects boolean content if($opt_f) { ## force unlink ... no ask $FORCE = 'TRUE'; } my @trgs = @ARGV; @ARGV = (); for (@trgs) { if (! -d) { print "Whoops, no directory <$_> found on system .. skipping\n"; my $ditchme = shift @trgs; # Get rid of non-starters $ditchme = ''; ## zero it out ?? } } use File::Find; use Cwd 'abs_path'; find( sub { return unless -f; my $file = $_; my $abs_path = abs_path($file); if (/~$|\#|\.sw[po]$/) { if (! $FORCE) { print "\\FOUND: <$abs_path>\n", " Shall we unlink <delete> it? <y/n> "; my $ans = <STDIN>; if ($ans =~ /^y$/) { unlink $abs_path or die "Can't unlink <$abs_path>: $!"; printf "%-60s %s\n","<$abs_path>", "unlinked"; ## We need to use $_ rather than $File::Find::name because ## The latter doesn't work in all situations. And since the ## File::Find program is recursing right along with the search ## $_ will always work } else { printf "%-60s %s\n", "<$abs_path>", "skipped" } } else { unlink $abs_path or die "Can't unlink <$abs_path>: $!"; printf "%-60s %s\n", "<$abs_path", "unlinked"; } } }, @trgs ); sub usage{ print " Purpose: Recurse thru list of directories and search out all editor leavings (some~ .some.swp some.bak etc), but also includes things like #some# or the like. Usage:`$myscript dir1 dir2 ... dirN' "; } -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/