Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

find2perl -exec on Windows

by QM (Parson)
on Feb 11, 2005 at 20:04 UTC ( [id://430237]=perlquestion: print w/replies, xml ) Need Help??

QM has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to do this on a windows box:
find2perl . -exec "dir {} \;" | perl
which gives me (after spitting out the results of dir . ..):
Use of uninitialized value in chdir at - line 47.
Here is the output from find2perl:
#! C:\Perl\bin\perl.exe -w eval 'exec C:\Perl\bin\perl.exe -S $0 ${1+"$@"}' if 0; #$running_under_some_shell use strict; use File::Find (); # Set the variable $File::Find::dont_use_nlink if you're using AFS, # since AFS cheats. # for the convenience of &wanted calls, including -eval statements: use vars qw/*name *dir *prune/; *name = *File::Find::name; *dir = *File::Find::dir; *prune = *File::Find::prune; sub wanted; sub doexec ($@); # Traverse desired filesystems File::Find::find({wanted => \&wanted}, '.'); exit; sub wanted { doexec(0, 'dir {} \;'); } use Cwd (); my $cwd = Cwd::cwd(); sub doexec ($@) { my $ok = shift; my @command = @_; # copy so we don't try to s/// aliases to consta +nts for my $word (@command) { $word =~ s#{}#$name#g } if ($ok) { my $old = select(STDOUT); $| = 1; print "@command"; select($old); return 0 unless <STDIN> =~ /^y/; } chdir $cwd; #sigh system @command; chdir $File::Find::dir; return !$?; }
Line 47 is:
chdir $cwd; #sigh
Now I may have missed some portability issues, but it seems to me that $cwd never gets set, because its assignment happens at line 33, while execution of "main" ends at the exit at line 24. I've checked this in the debugger by trying a breakpoint at line 33, to no avail.

Am I off base, or is this broken?

How would I fix this without editing the find2perl output directly?

Is there a real Windows version of find2perl?

Meanwhile, I'm wondering why find2perl.bat comes with the AS install if I can't do things like:

find2perl . -ls # getpwent, etc. not ported find2perl . -exec ... # $cwd not initialized

-QM
--
Quantum Mechanics: The dreams stuff is made of

Replies are listed 'Best First'.
Re: find2perl -exec on Windows
by sandfly (Beadle) on Feb 11, 2005 at 22:57 UTC
    It looks broken to me.

    You could post process the output by piping it through something like:

    perl -p -e "s/^(File::Find::find)/my \$cwd = Cwd::cwd();$1/"

    You might want to test that before you run it. And you don't have to tell me - it's ugly.

      perl -p -e "s/^(File::Find::find)/my \$cwd = Cwd::cwd();$1/"
      Thanks, that's a good suggestion.

      I'm trying to put something together for...how do you say...lusers, who aren't that sophisticated, and probably couldn't type that in given 10 tries. Ultimately I'm going to make a standalone that they can give options too, like:

      foo . -mtime -7 -ls
      Though now that I think about it, that might be too much for them also.

      I've now got a version of find2perl that works for -ls and -exec in windows (but is unchanged elsewhere). I've tried this in the find2perl output to reduce typing on the luser's part:

      open(STDOUT,'|perl') or die "...";
      but the command prompt returns before the final output starts and the first line of output doesn't line up. Reopening STDOUT and printing a newline seems to fix this.

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://430237]
Approved by Limbic~Region
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2024-04-23 08:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found