I want to match a comma-separated string, with zero or more items, and each item matches a particular regexp,

I presume you're trying to parse valid chmod input such as ug=rwx,o=rx. While your statement allows for a number of alternative permutations, this seems the most likely.

With regard to Update 2 in the OP and given the above understanding of valid input, I believe you may be looking for something akin to:

foreach (split /,/, $perm) { warn "Invalid permission setting: $_" unless /^[ugoa]+=[rwxsS]+$/; }

However, while this is significantly more informative, it doesn't adhere to the spirit of the OP prescription:

The idea is that I'm trying to take a single regexp, and have it match multiple times with an optional separator.

If you just want to detect whether the string contains an invalid permission and you don't need to inform the user of the errant setting, it is possible to use a single regex:

foreach (@perms) { warn "Invalid permission setting detected in $_" unless /^(([u +goa]+=[rwxsS]+)(?(?!$),))+$/; }


In reply to Re: Validation of unix permissions by eibwen
in thread Validation of unix permissions by Tanktalus

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.