On 10/03/2013 12:29 PM, Harry Putnam wrote:
Uri Guttman <u...@stemsystems.com> writes:

[...]

find( sub {
      return unless -f;
      $eperm = (stat($File::Find::name))[2];

you don't have the dir there so the file isn't found by stat.
you need "$f/$File::Find::name"


[...]


        print $File::Find::name . "\n";

that only prints the filename as you see. stat needs the dir too.

I'm probably misreading the documentation but to me perldoc File::Find
seems to be saying that $File::Find::name is supposed to contain the
directory and file name

From perldoc File::Find
[...]
,----
|   For example, when examining the file /some/path/foo.ext you will have:
|
|       $File::Find::dir  = /some/path/
|       $_                = foo.ext
|       $File::Find::name = /some/path/foo.ext
`----
[...]

And in fact trying your suggestion in my script, it looks like it
would try to make stat do something a bit unusual.  Like try to stat
an unrecognizable file name.  If I aim the altered script at a
directory named td with files named one, two, three in it, you can see
the results

(PS - I've changed $f for $d which makes more sense)
-------        ---------       ---=---       ---------      --------
#!/usr/local/bin/perl

use strict;
use warnings;
use File::Find;

my $d = shift;

find( sub {
     print "\$eperm = (stat($d/$File::Find::name))[2]\n";
    },
    $d
);

-------        ---------       ---=---       ---------      --------

,----
| script.pl ./td
| $eperm = (stat(./td/./td))[2]
| $eperm = (stat(./td/./td/three))[2]
| $eperm = (stat(./td/./td/one))[2]
| $eperm = (stat(./td/./td/two))[2]
`----

That will be a non-working comparision

in your original code and output you printed $File::Find::name and it only showed the file part and not the dir. maybe you had an empty dir there but that is what i was basing my comment about. stat would fail unless it had the dir in the path. that would be the cause of your undef warning.

uri


--
Uri Guttman - The Perl Hunter
The Best Perl Jobs, The Best Perl Hackers
http://PerlHunter.com

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to