$ uname -a CYGWIN_NT-10.0-19044 titan 3.3.5-341.x86_64 2022-05-13 12:27 UTC x86_64 Cygwin #### #!/usr/bin/env perl use strict; use warnings; use autodie ':all'; use constant { OLD => 0, NEW => 1, }; print "OS: $^O; Perl: $^V\n"; my @filenames = 'a' .. 'd'; my %perms = ( a => [0644, 0644], b => [0644, 0755], c => [0644, 0440], d => [0644, 07644], ); print "\n*** Initial permissions (visual check):\n"; list_perms(@filenames); print "\n*** Initial permissions (program check):\n"; check_perms(\@filenames, \%perms, OLD); change_perms(\@filenames, \%perms, NEW); print "\n*** Modified permissions (visual check):\n"; list_perms(@filenames); print "\n*** Modified permissions (program check):\n"; check_perms(\@filenames, \%perms, NEW); change_perms(\@filenames, \%perms, OLD); print "\n*** Restored permissions (visual check):\n"; list_perms(@filenames); print "\n*** Restored permissions (program check):\n"; check_perms(\@filenames, \%perms, OLD); sub list_perms { my (@files) = @_; my @cmd_list = (ls => '-l', @files); CORE::system {$cmd_list[0]} @cmd_list; return; } sub check_perms { my ($files, $perms, $oldnew) = @_; for my $file (@$files) { my $perm = (stat $file)[2] & 07777; my $expected = sprintf('%#5o', $perms->{$file}[$oldnew]); print "File: '$file'; Perm: ", sprintf('%#5o', $perm), '; Check: ', ( $perm == $perms->{$file}[$oldnew] ? 'OK' : "WRONG (expected: $expected)" ), "\n"; } return; } sub change_perms { my ($files, $perms, $oldnew) = @_; for my $file (@$files) { chmod $perms->{$file}[$oldnew], $file; } return; } #### $ ./perm_tasks.pl OS: cygwin; Perl: v5.36.0 *** Initial permissions (visual check): -rw-r--r-- 1 ken None 0 Sep 4 02:07 a -rw-r--r-- 1 ken None 0 Sep 4 02:07 b -rw-r--r-- 1 ken None 0 Sep 4 02:07 c -rw-r--r-- 1 ken None 0 Sep 4 02:16 d *** Initial permissions (program check): File: 'a'; Perm: 0644; Check: OK File: 'b'; Perm: 0644; Check: OK File: 'c'; Perm: 0644; Check: OK File: 'd'; Perm: 0644; Check: OK *** Modified permissions (visual check): -rw-r--r-- 1 ken None 0 Sep 4 02:07 a -rwxr-xr-x 1 ken None 0 Sep 4 02:07 b -r--r----- 1 ken None 0 Sep 4 02:07 c -rwSr-Sr-T 1 ken None 0 Sep 4 02:16 d *** Modified permissions (program check): File: 'a'; Perm: 0644; Check: OK File: 'b'; Perm: 0755; Check: OK File: 'c'; Perm: 0440; Check: OK File: 'd'; Perm: 07644; Check: OK *** Restored permissions (visual check): -rw-r--r-- 1 ken None 0 Sep 4 02:07 a -rw-r--r-- 1 ken None 0 Sep 4 02:07 b -rw-r--r-- 1 ken None 0 Sep 4 02:07 c -rw-r--r-- 1 ken None 0 Sep 4 02:16 d *** Restored permissions (program check): File: 'a'; Perm: 0644; Check: OK File: 'b'; Perm: 0644; Check: OK File: 'c'; Perm: 0644; Check: OK File: 'd'; Perm: 0644; Check: OK #### Cygwin MSWin ============================= ==================== /cygdrive/c C:\ /cygdrive/d D:\ /cygdrive/c/Users/ken C:\Users\ken /cygdrive/c/cygwin64 C:\cygwin64 / C:\cygwin64 /cygdrive/c/cygwin64/home/ken C:\cygwin64\home\ken /home/ken C:\cygwin64\home\ken