I want to test if a file is writable by the group or world. What I tried is below, but test three fails unexpectedly
use feature 'say';
my $file = $ARGV;
my $sb = stat( $file );
my $mode = $sb->mode & 0777;
warn "mode of [$file] is [$mode]";
ok( -O $file, "File owned by real uid" );
ok( -f $file, "File is a plain file" );
ok( ! $mode & 022, "File is not group or world writable" );
# Results in:
mode of [/etc/passwd] is  at ./foo.pl line 14.
not ok 1 - File owned by real uid
# Failed test 'File owned by real uid'
# at ./foo.pl line 16.
ok 2 - File is a plain file
not ok 3 - File is not group or world writable
# Failed test 'File is not group or world writable'
# at ./foo.pl line 18.
# Looks like you failed 2 tests of 3.