[EMAIL PROTECTED] (Peter Scott) writes: >>How can I get an editable file name in there programatically? > > You need a more capable ReadLine package. Install > Term::ReadLine::Gnu and do: > > BEGIN { $ENV{PERL_RL} = 'Gnu' } > use Term::ReadLine; > my $term = new Term::ReadLine 'Simple Perl calc'; > my $prompt = "Enter your arithmetic expression: "; > my $OUT = $term->OUT || \*STDOUT; > while ( defined ($_ = $term->readline($prompt, '<SOMETHING here>')) ) { > my $res = eval($_); > warn $@ if $@; > print $OUT $res, "\n" unless $@; > $term->addhistory($_) if /\S/; > }
Haa... nifty. Thanks, that was the missing ingrediant. I think I'll try your patience once more and see if you'd care to comment or provide a sanity check on the script resulting from your input: (Its overcommented but that might mean I'll see what its supposed to do 6 mnths from now) #!/usr/local/bin/perl -w # Keywords: rena.pl - designed to hasten file renaming [ File names # presented one at a time on an editable cmdline] # Apr 30 23:32:40 2004 5 # && my $myscript; ($myscript = $0) =~ s:^.*/::; ## Make sure PERL_RL is not set to 'perl' BEGIN { $ENV{PERL_RL} = 'Gnu' } use Term::ReadLine; if($ARGV[0] =~ /help/i){ usage(); exit; } ## Catchall reg my $filereg = '[\d\w]'; ## Default working dir my $wrkdir = "./"; ## ========== BEGIN Getopts section ========== ## Declare vars inside qw() use vars qw($opt_d $opt_r ); use Getopt::Std; my $optstr ="r:d:"; getopts($optstr); if($opt_d){ ## If $opt_d doesn't exist, show usage and die, else set $wrkdir if(! -d $opt_d){ usage(); die "Problem with <$opt_d>: $!"; }else{ $wrkdir = $opt_d; } } if($opt_r){ ## Change the default regex $filereg = $opt_r; } opendir(WRKDIR,"$wrkdir")or die "Can't open $wrkdir: $!"; chdir $wrkdir or die "Can't chdir to $wrkdir: $!"; ## compile file regex $freg = qr/$filereg/; @FilesToRename = grep { /$freg/ && -f "$_" }readdir(WRKDIR); close(WRKDIR); my $term = new Term::ReadLine 'Perl file rename utility'; my $prompt = "(type \`p <RET>' to bypass current file, press \`Ctrl-c' to abort program) Filename to edit => "; ## tell perl where to send the output my $OUT = $term->OUT || \*STDOUT; for(@FilesToRename){ my ($reg, $cmpreg, $fname, $newname); $fname = $_; ## If we have input if ( defined ($_ = $term->readline($prompt, "$fname")) ) { ## Stick whatever edits into $newname $newname = $_; ## Compile a regex for testing for user bypass `p<RET>' $reg = $fname . "p\$"; $cmpreg = qr/$reg/; ## If we don't have a `p<RET>' then rename to $newname if ( $newname !~ /$reg/){ print "Renaming $fname to $_\n"; rename $fname, $newname or warn "Can't rename $fname to $newname: $@"; ## Bump our cmdline memory $term->addhistory($_) if /\S/; }else{ print "No rename performed on $fname, moving on..\n"; } } } sub usage { print <<EOM; Purpose: Make renaming of files faster USAGE: \`$myscript [-d 'DIR'] [-r REG]' Flags: -d DIR <optional> for selecting a directory to work in -r REG <optional> for setting the file selection regex EOM } -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>