in reply to Swapping object variables

In this specific case, you might like:     return delete $self->{buffered_text}; but several times I have felt the desire to have a "delayed assigment" syntax much like the post increment and decrement operators. That is, an assignment operator that would return the value of the variable from before the assignment takes effect.

For example, without advocating it as a reasonable syntax choice, consider =: as meaning "delayed assigment" and .=: being the delayed version of .=, etc.

my $old_value= $value .=: $more_text; # and return $self->{buffered_text} =: "";

But I've wanted this infrequently enough and found the creation of a temporary variable to be reasonable enough, that I'm not pushing for such an addition.

BTW, I'd use your original version of the code over your last version in production. (:

        - tye (but my friends call me "Tye")

Replies are listed 'Best First'.
Re: (tye)Re: Swapping object variables
by Matts (Deacon) on Jan 24, 2002 at 20:48 UTC
    I did consider delete, except in this particular case (where everthing is ".="), undef/delete causes "Use of uninitialized variable" warnings, unless unset $^W, which I don't like doing, or use 5.6's lexical warning pragmas, and a CPAN author can't really mandate 5.6.

    Thanks though.

      One would think so, eh? But I actually tested that before I posted:

      #!/usr/bin/perl -w use strict; my %h; $h{okay} .= "Hello"; # No warning (for me, at least) warn "----\n"; $h{warn}= $h{warn} . "Hello"; # Gives a warning
      produces
      ---- Use of uninitialized value in concatenation (.) at line 6.
      But perhaps this isn't true in some older versions of Perl (I only tested v5.6.0).

              - tye (but my friends call me "Tye")
        My understanding is that the operators such as += .= -= are immune from uninitialized warnings whereas their longwinded counterparts ($x = $x + 1) are not. After beating myself about the head trying to figure out exactly what will trigger this warning, I posted a little quiz about my findings.

        -Blake

Re: (tye)Re: Swapping object variables
by petral (Curate) on Jan 24, 2002 at 22:21 UTC
    Something I've always wanted is a 'left associative =' which would do exactly that:
    my $text =< $self->{buffered_text} =< '';


      p