in reply to $#="%c"; possible bug

Setting $# sets the output format for printed numbers. I don't see why you expect '107' to be printed, I would expect 'k' to be printed.

But $# has been broken for eons, and it has been deprecated for even longer. I've never seen it used in code that wasn't intentionally obfuscated.

Abigail

Replies are listed 'Best First'.
Re: Re: $#="%c"; possible bug
by ambrus (Abbot) on Feb 20, 2004 at 23:53 UTC

    ord('k') is 107 so it should print 107, and the first statement should not affect it.

    Is $# really broken for eons? Where's that from? See my reply for the other post Re: Re: $#="%c"; possible bug.

    Update: effect->affect

      ord('k') is 107 so it should print 107
      Uhm, no.
      the first statement should not effect it.
      Yes, it should. To quote myself: Setting $# sets the output format for printed numbers. 107 is still a number in my book.

      From man perlvar:

      $# The output format for printed numbers. This vari­ able is a half-hearted attempt to emulate awk's OFMT variable. There are times, however, when awk and Perl have differing notions of what counts as numeric. The initial value is "%.ng", where n is the value of the macro DBL_DIG from your system's float.h. This is different from awk's default OFMT setting of "%.6g", so you need to set $# explicitly to get awk's value. (Mnemonic: # is the number sign.) Use of $# is deprecated.

      Is $# really broken for eons? Where's that from?
      Yes it is. Your code is proof.

      Abigail

        Good point. Now I see. I somehow thought $# only affects floating-point values. It seems that I didn't read the doc carefully enough.

        And it seems that $# uses the system's builtin sprintf, not perl's.