Loading ...
Sorry, an error occurred while loading the content.

Autovivification issues w/ Perl 5.7

Expand Messages
  • igorp@photonet.com
    I ve just installed SOAP::Lite 0.50 with Perl 5.7.0, and have experienced several fatal errors, like Use of uninitialized value and use an undefined value
    Message 1 of 2 , Jul 5 9:41 AM
    • 0 Attachment
      I've just installed SOAP::Lite 0.50 with Perl 5.7.0, and have
      experienced several fatal errors, like "Use of uninitialized value"
      and "use an undefined value as a HASH reference". In addition,
      parsing is messed up - Expat creates empty slot for any text content,
      so making "Hello world" example to be silent :)

      As far as I see, the reason is that 5.7 is somewhat more restrictive
      with autovivification of references, than 5.6. For instance, it
      doesn't define it automatically in code like following:

      my $c;
      for ($c) { $_->{key} = "value" }

      However, it still works in "direct" case:

      my $c;
      $c->{key} = "value";

      In 5.6 both cases are valid.
      I didn't check yet the status of this feature - perhaps, it is not
      intended, and has to be fixed in next releases of Perl. Meanwhile,
      explicit initialization helps with 5.7 and make no harm with 5.6:

      # SOAP::Parser
      sub char { (shift->{_values}->[-1]->[3] ||= "") .= shift }
      .......

      # SOAP::Schema::WSDL
      $services{$opername} ||= {};


      Igor Pechersky,
      PictureVision, Inc.
    • Paul Kulchenko
      Hi, Igor! Thank you for the information. I did some tests for 5.7.1 and it seems like your point is absolutely valid, moreover, I think it was such intent to
      Message 2 of 2 , Jul 5 7:46 PM
      • 0 Attachment
        Hi, Igor!

        Thank you for the information. I did some tests for 5.7.1 and it
        seems like your point is absolutely valid, moreover, I think it was
        such intent to alter this behavior in 5.7.x. Anyway, I'll check the
        source code for places that might work incorrectly in 5.7 and thanks
        for the hint. Let me know if you find anything else.

        Best wishes, Paul.

        --- igorp@... wrote:
        > I've just installed SOAP::Lite 0.50 with Perl 5.7.0, and have
        > experienced several fatal errors, like "Use of uninitialized value"
        >
        > and "use an undefined value as a HASH reference". In addition,
        > parsing is messed up - Expat creates empty slot for any text
        > content,
        > so making "Hello world" example to be silent :)
        >
        > As far as I see, the reason is that 5.7 is somewhat more
        > restrictive
        > with autovivification of references, than 5.6. For instance, it
        > doesn't define it automatically in code like following:
        >
        > my $c;
        > for ($c) { $_->{key} = "value" }
        >
        > However, it still works in "direct" case:
        >
        > my $c;
        > $c->{key} = "value";
        >
        > In 5.6 both cases are valid.
        > I didn't check yet the status of this feature - perhaps, it is not
        > intended, and has to be fixed in next releases of Perl. Meanwhile,
        > explicit initialization helps with 5.7 and make no harm with 5.6:
        >
        > # SOAP::Parser
        > sub char { (shift->{_values}->[-1]->[3] ||= "") .= shift }
        > .......
        >
        > # SOAP::Schema::WSDL
        > $services{$opername} ||= {};
        >
        >
        > Igor Pechersky,
        > PictureVision, Inc.
        >
        >
        >
        > To unsubscribe from this group, send an email to:
        > soaplite-unsubscribe@yahoogroups.com
        >
        >
        >
        > Your use of Yahoo! Groups is subject to
        > http://docs.yahoo.com/info/terms/
        >
        >


        __________________________________________________
        Do You Yahoo!?
        Get personalized email addresses from Yahoo! Mail
        http://personal.mail.yahoo.com/
      Your message has been successfully submitted and would be delivered to recipients shortly.