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


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

It seems to miss cases like:
$foo ->[2]; # Space before or after -> print $_->{bar}; # Only two non-space chars before -> $sum += $_->[0] for @array; # Only three non-space chars after ->
And since you aren't using warnings, you don't get a warning if you try to print an undefined $1.

OTOH, it would find a deref in:

perl -ne '/(\S{3,80}->\S{5,80})/;print $1,"\n"'
Don't tell me you never write code like that!

But I'm baffled by the fact you're searching for '->' when you need to figure out which hashes are in some code.

Replies are listed 'Best First'.
Re^2: Print all derefs and method calls in a directory (Friday golf)
by ikegami (Patriarch) on Jan 09, 2009 at 10:11 UTC
    Assuming rgrep does what I thik it does, $1 will never be undef since he pre-filters the lines.

    (Nevermind, the patterns are different, so it's possible.)

      Unless 'rgrep' does something completely different from 'egrep', 'fgrep' or 'grep', you're wrong:
      $ cat foo $foo ->[2]; print $_->{bar}; $sum += $_->[0] for @array; $ fgrep -e '->' foo | perl -nwe '/(\S{3,80}->\S{5,80})/;print $1,"\n"' Use of uninitialized value $1 in print at -e line 1, <> line 1. Use of uninitialized value $1 in print at -e line 1, <> line 2. Use of uninitialized value $1 in print at -e line 1, <> line 3. $
      He does prefilter the line. But the filter is just for '->' while the pattern requires context around the '->'.