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


in reply to Extreme Example of TMTOWTDI

You'd get the same speed up by doing this:
open(OUTPUT,">>${len}.words"); while(<>){ chomp($_); $len = length($_); print OUTPUT "$_\n"; } close(OUTPUT);
Might even be faster since there is no array house cleaning. But at 2 seconds, I imagine that it takes longer to type the command then run anyway.

Replies are listed 'Best First'.
Re2: Extreme Example of TMTOWTDI
by dragonchild (Archbishop) on Mar 22, 2002 at 16:41 UTC
    open(OUTPUT,">>${len}.words"); while(<>){ chomp($_); $len = length($_); print OUTPUT "$_\n"; } close(OUTPUT);
    This doesn't do what the others do. For one, $len isn't defined before the open. Secondly, you don't have an outer loop involved to be able to re-open the files as needed.

    Secondly, if you're going to use $_, then use it. Don't piddle around. If you're going to use a named variable (and I'm not saying this is bad), then name it. Otherwise, take advantage of Perl-isms.

    while (<>) { chomp; my $len = length; print OUTPUT $_, $/; }
    It wouldn't be nice unless I posted my own (unBenchmarked) version.
    use IO::File; my %Handles; while (<>) { my $handle = $Handles{length} ||= IO::File->new(">" . length - 1); print $handle $_; } # This is unnecessary unless you're anal (like I try to be) $_->close for values %Handles;

    ------
    We are the carpenters and bricklayers of the Information Age.

    Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.