This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #113796] lib/File/stat.t failures when -l $^X
authorFather Chrysostomos <sprout@cpan.org>
Sun, 24 Jun 2012 07:10:55 +0000 (00:10 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 24 Jun 2012 07:11:42 +0000 (00:11 -0700)
It seems that gcc produces this:

$ ./perl -Ilib -e 'warn $^X'
/Users/sprout/Perl/perl.git/perl at -e line 1.

while g++ produces this:

$ ./perl -Ilib -e 'warn $^X'
./perl at -e line 1.

(I may be misdiagnosing this, but I have two blead builds that give
different values for $^X.)

The script is using $^X for testing, which is why it could produce
different results.

In any case, this produces the same output for both compilers:

use File::stat;
my $stat = File::stat::stat('./perl');
warn eval '-l $stat';
warn eval '-l "./perl"';
__END__
Warning: something's wrong at - line 3.
1 at - line 4.

The test is wrong, as -l _ will fail after a stat.  You have to do
lstat for -l _ to work.  Similarly, -l $stat_obj should only return
true if the $stat_obj was returned by File::stat::lstat.

This commit adjusts the test accordingly.

lib/File/stat.t

index 5100271..b85ff95 100644 (file)
@@ -55,6 +55,7 @@ sub test_X_ops {
     my ($file, $desc_tail, $skip) = @_;
     my @stat = CORE::stat $file;
     my $stat = File::stat::stat($file);
+    my $lstat = File::stat::lstat($file);
     isa_ok($stat, 'File::stat', 'should build a stat object');
 
     for my $op (split //, "rwxoRWXOezsfdlpSbcugkMCA") {
@@ -62,6 +63,7 @@ sub test_X_ops {
             note("Not testing -A $desc_tail");
             next;
         }
+        my $stat = $op eq 'l' ? $lstat : $stat;
         for my $access ('', 'use filetest "access";') {
             my ($warnings, $awarn, $vwarn, $rv);
             my $desc = $access