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


in reply to Re^3: Binary to decimal conversion
in thread Binary to decimal conversion

In list context:
my @array = reverse( LIST );
In scalar context:
my $value = reverse( LIST );
Fine. But it does not say how it's supposed to behave when fed a SCALAR instead of a LIST, does it?

I'm still confused.

--
Andreas

Replies are listed 'Best First'.
Re^5: Binary to decimal conversion
by Fletch (Bishop) on Dec 11, 2007 at 13:43 UTC

    Erm . . . a LIST may consist of a single scalar value. That single scalar value is concatenated with all the other elements in the LIST (very quickly, obviously, since they're non-existent) and the bytes in that concatenated string (i.e. the single scalar argument) are returned in reverse order, just like the docs say.

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

      Then tell me why this prints hello and not olleh?
      $ perl -wle 'print reverse(q{hello})' hello
      --
      Andreas

        Because print takes a LIST and hence provides a list context to reverse which triggers the list context behavior from the latter (and a 1 element list reversed is indistinguishable from the original 1 element list for obvious reasons). Stick a scalar in there after the print, and/or store the reverse into a scalar temporary variable, and you'll see the behavior you're expecting.

        The cake is a lie.
        The cake is a lie.
        The cake is a lie.

        Because you did not RTFM :)
        reverse LIST In list context, returns a list value consisting of the elemen +ts of LIST in the opposite order. In scalar context, concatenates the elements of LIST and returns a string value with all characters in the opposite order. print reverse <>; # line tac, last line first undef $/; # for efficiency of <> print scalar reverse <>; # character tac, last line tsr +if Used without arguments in scalar context, reverse() reverses $ +_. This operator is also handy for inverting a hash, although the +re are some caveats. If a value is duplicated in the original has +h, only one of those can be represented as a key in the inverted hash. Also, this has to unwind one hash and build a whole new one, which may take some time on a large hash, such as from a DBM file. %by_name = reverse %by_address; # Invert the hash