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.
  • sub convert_to_list {
        my $self = shift;
        # Return knows if it's a scalar or array context!
        my $args = $self->arguments or return;
        return split / (?=-)/, $args;
    }
    • by Ovid (2709) on 2003.11.03 23:20 (#25443) Homepage Journal

      In theory, that looks good and if I were calling the shots, it would be. However, consider the following:

      some_func(other_func1(), other_func2());

      If one of the "other funcs" has a bare return, some_func() will be passed a list with only one element! You can get around this by prepending the function calls with scalar, but that is not done in the shop I work at, yet function calls are often embedded in other function calls. Thus, we have explicit return values. If only one value is being returned, we return undef (to my dismay).

      That means we get tripped up going the other direction:

      sub some_func {
          return undef unless ($some_condition);
      }

      my @results = some_func($value);
      if (@results) { # wrong!

      That fails because we have a array with one undef element, which in scalar context evaluates as true. In this respect, it's a backwards coding style they have here, but I'm trying to follow it.