in reply to Re: File ext number
in thread File ext number

Your match doesn't match when readdir returns .
Are you saying that the dot (.) directory somehow makes it past the grep {-f} filter in the OP's code? I freely admit I have no idea what that whole line does in the OP's code, but it would be surprising to me if . made it past the filter.

Replies are listed 'Best First'.
Re^3: File ext number
by ikegami (Patriarch) on Mar 19, 2010 at 23:54 UTC

    Are you saying that the dot (.) directory somehow makes it past the grep {-f} filter in the OP's code?

    I guess I was without realizing it. Obviously, that's not true and my explanation is wrong. Take two:

    $ext{$1} += (m/([^.]+)$/);
    means something close to
    $ext{$1} = $ext{$1} + (m/([^.]+)$/);

    Well, actually more like the following, but it doesn't matter for this discussion:

    alias $temp = $ext{$1}; $temp = $temp + (m/([^.]+)$/);

    Either way, you are relying on Perl evaluating the RHS of the "+=" operator before its LHS, and that's not how Perl operates. In fact, Perl doesn't document how it operates in this circumstance, and that's the reason it's generally a no-no to change and use the same variable in the same expression.

    Even though my earlier explanation was wrong, the solutions I posted still avoid the problem.

    Update: Improved phrasing by inlining footnotes.