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

Q&A > files > How do I get all the permission flags on a file? - Answer contributed by BastardOperator

If merlyn's answer confuses you at all, try this:
sub return_mode { my $mode = shift; my @modelist = (($mode & 7000)>>9, ($mode & 0700)>>6, ($mode & 007 +0)>>3, ($mode &0007)); return join('', @modelist); }
Also, I don't know if you would be concerned with ACL's at all, I'm not sure how you would handle those if you were, just wanted to give you a heads up depending on how detailed you're being.

Replies are listed 'Best First'.
RE: Answer: How do I get all the permission flags on a file?
by merlyn (Sage) on Sep 26, 2000 at 06:44 UTC
    sub return_mode { my $mode = shift; my @modelist = (($mode & 7000)>>9, ($mode & 0700)>>6, ($mode & 007 +0)>>3, ($mode &0007)); return join('', @modelist); }
    Hmm. Is that just a difficult (and incorrect, see "7000") way of doing this...?
    sub return_mode { sprintf "%04o", (shift) & 07777; }

    -- Randal L. Schwartz, Perl hacker

      Hmm. Is that just a difficult (and incorrect) way of being a human being...?

      Ya know Randall, the more I watch you, the more I dislike you. I guess it would have been way too difficult for you to simply say something like
      "A slightly shorter method would be ..., and you need to use 07777 for reason blah".
      Yeah, I could see how much that would strain you. Frankly Randall, your Perl skills are fabulous, but your people skills need work.

      What I'd like to know is why you didn't just offer that answer in the first place? You certainly gave a previous person his homework answer without thought, why wouldn't you have offered this up rather than what might have been an answer that this individual didn't get?

      I don't claim to be some perl guru, I'm completely self-taught and haven't been doing it but sparsely for about a year, I think that's probably the case for a lot of folks here. We can't all have the experience that you have. I pick up bits and pieces here and there, and this is the only way I've ever seen to do this, besides the fact that it's always worked fine for me. The funny thing is, I probably take criticism better than anyone I've ever met, but constructive criticism is different than sarcastic criticism.

      Please try to realize that we're not all guru's and some of us won't stand to be degraded.
        The funny thing is, I probably take criticism better than anyone I've ever met
        If you trigger on the words "difficult" and "incorrect", taking them personally in a way no other person I met has, I highly doubt your claim.

        It's not my intention to discredit you. In fact, I didn't care who wrote that post. What I saw was what I said... a series of difficult-to-get-right steps to accomplish what could be accomplished in a short sequence.

        And as for answering this to the original poster, as I view back up the thread, it's not even the right answer. The answer I gave earlier was much closer to what the original poster wanted. Your posting strayed further away, giving a mostly useless octal value where what was needed was simply taking the stat value, optionally anding it with 07777, and then handing that to chmod. That's what I said, and even though I didn't include code, it was more accurate and accomplished more than your detour, either original, or as I corrected it.

        So, I challenge your claim that you can take constructive criticism. I also challenge your claim that your answer was more useful than mine.

        Heck, you'll probably even see this post as another personal assault, when really I'm just trying to get you to see that you're being ineffective and distracting, although you get an A for effort. {grin}

        -- Randal L. Schwartz, Perl hacker