http://qs321.pair.com?node_id=735161


in reply to Re: Print all derefs and method calls in a directory (Friday golf)
in thread Print all derefs and method calls in a directory (Friday golf)

Since you're using 'say', you have to use '-E' instead of '-e'.

Note also that [+-]{2} is not equivalent to \+\+|-- as the former matches "-+" while the latter doesn't. Also, the original code will remove a leading "(--" from the line, while your code will not (it will either remove a leading '(' or a leading '--', '-+', '+-' or '--'). Finally, a /g modifier is useless if the pattern is anchored to the beginning of the string. And, if you're golfing, you shouldn't make a capture if you aren't using the result.

Your s/// could be written as:

s/^\(?([-+])\1//
My entry (untested):
perl -nE'/\(?([-+])\1.*?(\S{3,80}->\S{5,80})/&&say$2' *|sort -u
I do think the 80 is a bit arbitrary, and
perl -nE'/\(?([-+])\1.*?(\S{3,}->\S{5,})/&&say$2' *|sort -u
is not only shorter, but likely to be preferred.

Replies are listed 'Best First'.
Re^3: Print all derefs and method calls in a directory (Friday golf)
by ikegami (Patriarch) on Jan 09, 2009 at 13:03 UTC

    Since you're using 'say', you have to use '-E' instead of '-e'.

    Oops!

    it will either remove a leading '(' or a leading '--', '-+', '+-' or '--')

    Oops!

    [+-]{2} is not equivalent to \+\+|--

    Indeed, but I deemed it acceptable.

    if you're golfing, you shouldn't make a capture if you aren't using the result.

    Not until Perl6. /...(?:...|...)/ is longer than /...(...|...)/. (Multiplying out the leading subexpression would have been shorter, but that's not the issue you raised.)

    I take your 69 and give you 51:

    perl -nE'/[-+(]*(\S{3,}->\S{5,})/&&say$1' *|sort -u