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


in reply to Re^3: uninitialized value in join or string
in thread uninitialized value in join or string

How could I substitute all the NULL values in an array and replace them with ' ' characters?
  • Comment on Re^4: uninitialized value in join or string

Replies are listed 'Best First'.
Re^5: uninitialized value in join or string
by Roy Johnson (Monsignor) on Oct 31, 2005 at 16:02 UTC
    @values = map { defined $_ ? $_ : '' } @values;
    Update: don't use map for transforming something into itself. If you're getting from a different source, though, this would be an appropriate technique.

    Caution: Contents may have been coded under pressure.
      This looks great. However, I would be very pleased if somebody could describe it in English. ;>
        map acts like a foreach loop, walking through an array (or list) and aliasing $_ to each element in turn. In addition to walking the list, though, map also constructs an array. The upshot is that you can transform an array with it.

        But explaining that just made me realize that you can get the same result with a foreach loop in this case:

        foreach (@values) { $_ = '' unless defined; }
        That should be more clear. It updates each undefined element of @values to be the empty string.

        Caution: Contents may have been coded under pressure.