Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • It's in a very functional style, that's all.

    True, most Perl programmers would have trouble maintaining it, and this is a valid concern.

    Maybe you should comment it heavily and stare at it until you understand it forward and backwards. There's a lot to be gained by functional programming. Generally, the fewer the intermediate variables and the less the code, the _better_ the maintenance in the long run.

    Obnoxious comment. Could you make it even more functionally gnarly with something like this (untested)?

    my %names =
            map { @$_ }
            mapcaru( sub {[@_]}, \@name_ids,
                [map { join ' ', @$_ }
                  map { [non_empty(@$_)] }
                      mapcaru(
                          sub {[@_]},
                          @{mapcaru(
                                  $get_common_words,
                                  [map { $_->[0] } @bad_names] )})]);

    ?

    Don't hit me!

    • Aack! I'll pretend you didn't write that :)

      One of the reasons why I break things into smaller steps like I did is that it's easier to insert debugging statements. As for the above, I wound up using an entirely different strategy suggested by Gav.

      sub _set_up_names {
          my ($self,$products) = @_;
          my $length = 0;
          my @names =
              map {
                  local $_ = [$_->id, [split ' ', $_->name]];
           

      • I've heard this argument about inserting debug statements, but I think it's oversold.

        If I have something in an extreme functional style and I need to debug it, I just replace one of the function calls with a call to a function_debug wrapper. In my above extremely functional style, you could add map_debugs or mapcaru_debugs which would print arguments and then apply the map or mapcaru function.

        One added advantage of this is that you can get all your maps or mapcarus to confess at once, often yielding une

  • You could always make the arguments of a smug Lisp weenie:

    • everyone knows that only heretics use insert some common construct here!
    • you don't really need to do that
    • anyone who can't understand that code isn't worthy of programming computers

    As for me, a smug Perl weenie, I think you may go better pulling out a couple of subroutines. I don't write a lot of loops anymore.

    • So the Smug XP Weenie says "Extract Method!" instead? ;-)

      -Dom

      • I could have sworn I put on my "maintainable code" hat this morning. Oh well!

        If your Ward Cunningham number is appropriately low, you'll know a Confident XP Weenie would say, "What would happen if you extracted a couple of those transformations into their own methods?" Unlike smug weenies, confident weenies are subtle.

        • Guess who is kicking himself for missing the chance to get his Ward number down to 1 at OSCON this year? Ward even asked me to show him something in the Squeak image and I said "Um... bit busy, can I catch up with you later" and I never did.