http://www.perlmonks.org?node_id=332895


in reply to Re: inheritance turns back and bites
in thread inheritance turns back and bites

sub new { bless \pop, shift } it's like doing sub new { bless \42, "MyNumber" } and you can't bless a constant into an object. so do my $arg = pop; bless \$arg, shift
I do not think this is wrong, since \pop is like \pop @_ and whatever I pop it is pushed and a pushed constant is a scalar.
Boris
  • Comment on Re: Re: inheritance turns back and bites

Replies are listed 'Best First'.
Re: Re: Re: inheritance turns back and bites
by tinita (Parson) on Mar 01, 2004 at 14:01 UTC
    sorry, but:
    perl -wle' sub new { bless \pop, shift } my $main = new ("ClassName", 42);' Modification of a read-only value attempted at -e line 2. This is perl, v5.6.1 built for i586-linux This is perl, v5.8.0 built for i686-linux

    am i overlooking something?

    Update: same result with
    This is perl, v5.8.2 built for i686-linux

      you are correct, but there should be something strange going on under the hood. it seems only Windows allows the bless \pop, shift trick.

      This is perl, v5.8.0 built for MSWin32-x86-multi-thread -> ok
      This is perl, v5.8.2 built for cygwin-thread-multi-64int -> ok
      This is perl, v5.8.0 built for i686-linux -> dies

      sorry for not checking this beforehand. however, the reason why it works on a platform and fails on another is beyond the scope of this thread :-)

      cheers,
      Aldo

      King of Laziness, Wizard of Impatience, Lord of Hubris

      Interesting, your sample code did _not_ result in a errormessage for me on linux with perl 5.8.1! But it does with my old perl 5.6.1 on the same machine.
      Boris
        oh, interesting. i have 5.8.2 only at home, i'll try with that later. but i can't find anything about that in the perldelta.pod of 5.8.1...