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/