http://www.perlmonks.org?node_id=1034026

davidfilmer has asked for the wisdom of the Perl Monks concerning the following question:

Hello. I have this code, which is an attempt to duplicate the permissions of one file onto another:
my $mode = (stat( $original_file ))[2]; my $perms = sprintf "%04o", $mode & 07777; chmod( $target_file, oct($perms) ) or warn "Could not chmod '$targe +t_file' to $perms: $!\n";
Perl warns me:
Could not chmod '/data/dmu/share/Product/PMprofile' to 0644: A file or + directory in the path name does not exist.
But it bloody well too does exist:
> ll /data/dmu/share/Product/PMprofile -rw-rw-rw- 1 dfilmer wheel 1015 Jun 19 2012 /data/dmu/sha +re/Product/PMprofile
I seek wisdom!!! Why does chmod not see my file? Thanks!

Replies are listed 'Best First'.
Re: perl chmod tells me file does not exist (but it does)
by stephen (Priest) on May 17, 2013 at 22:07 UTC
    It should be:
    chmod( oct($perms), $target_file );

    stephen

      Holy crap - is it really that simple and that stupid? I got the args mixed up??? Gaaaa!!!! Thanks!!!!
Re: perl chmod tells me file does not exist (but it does)
by hippo (Bishop) on May 17, 2013 at 22:06 UTC

    Perhaps because you have given the args to chmod in the wrong order?

Re: perl chmod tells me file does not exist (but it does)
by Anneq (Vicar) on May 17, 2013 at 22:30 UTC

    Sometimes your script may not be operating in the directory you think it is (e.g., script run under a web server), or there may be a typo in a file name, or some other problem, etc. Comment out the chmod line and try this to see if you get what you are expecting:

    my $original_mode = (stat( $original_file ))[2]; my $target_mode = (stat( $target_file ))[2]; print "Original Filename: $original_file\nOriginal mode: $original_mod +e\n"; print "Target Filename: $target_filename\ntarget mode: $target_mode\n" +;

    Anne