in reply to When does '123' become the number 123.0?

what is actually stored in $a$i? Is it the string "123" or the number 123.0? And does it make any difference to the perl programmer?
Usually it doesn't matter - perl figures out how you want to interpret the value based on how you use it. For instance, if you write $x + 1, perl will convert $x to a number. If you write length($x), perl will interpret $x as a string, converting it from a number (either floating point or integer) if necessary.

If it does matter to you - for instance, if you need numbers to have a specific format - you can explicitly convert them to strings using something like sprintf().

Replies are listed 'Best First'.
Re^2: When does '123' become the number 123.0?
by wa1ter (Initiate) on Jun 16, 2008 at 23:44 UTC
    Let's say that my use of $x is inside a loop and complicated, like $y = $x**$x or somesuch, and also prints $y and $x to the console.

    I'm assuming (and hoping) that perl is smart enough to convert $x to a number for the computations and to a string for printing, and do it all at compile time and not at runtime. Is this a safe assumption?

      Perl will definitely treat $x and$y as numbers for the computations, and when you print $x and $y you will be presented with their current numeric values. If that's what you're after (and I assume it is) then you have nothing to worry about. But if, for some perverse reason, you want the following to print $y's string value (2) instead of its numeric value (7) then you're out of luck:
      use warnings; $y = "2"; $y += 5; print $y;
      Btw, it's all being taken care of quite efficiently at runtime - not compile time. I wouldn't worry about wasting cycles - this is the way it's designed to work. Just let perl handle it.

      As mentioned elsewhere in this thread, doing repeated Devel::Peek::Dump($x) is the best way of seeing how perl keeps track of things by using the scalar's flags and (PV,IV,UV,NV) slots.

      Cheers,
      Rob