[Moscow.pm] Неопределённое значение, но не undef

Анатолий Гришаев 0body0 на rambler.ru
Чт Дек 26 00:25:28 PST 2013


Но только во втором случае обращение в lvalue приводит undef к пустой строке, что
и вызывает uninitialized warning

а в случае foo($bar{+undef});

подозреваю перевод undef в пустую строку сделано на этапе компиляции, поэтому
варнинг и не выскакивает

Анатолий Гришаев.

  26.12.2013, 12:15:02 пользователь Alexander Onokhov (ccnweb на gmail.com)
  написал:


  lvalue, присваивание которому автовивифицирует элемент хеша в обоих случаях
  передаётся.


  2013/12/26 Анатолий Гришаев <0body0 на rambler.ru>



    Во втором случае передается lvalue, при обращении к нему и вылетает
    второе предупреждение.
    Можно закомментировать строчку с $val и посмотреть.
    А значение одно и тоже undef.

    Анатолий Гришаев.

      26.12.2013, 4:32:27 пользователь Denis Ibaev (dionys на gmail.com)
      написал:

      Привет.

      Вот такой код

      sub foo { my ($val) = @_; }
      my %bar;
      my $undef;

      foo($bar{undef});
      foo($bar{$undef});
      выдаст на втором вызове функции foo() предупреждения

      Use of uninitialized value $undef in hash element
      Use of uninitialized value within @_ in list assignment

      При этом в первом вызове массив @_ будет содержать один элемент со
      значением undef, точнее алиас для $bar{"undef"}. Во втором же так же
      будет один элемент и как будто undef, но, судя по предупреждению, не
      совсем он. Похоже, что алиас на неопределённый элемент %bar. В чём же
      разница этих вызовов и для чего?

      --
      Денис Ибаев
      --
      Moscow.pm mailing list
      moscow-pm на pm.org | http://moscow.pm.org

    --
    Moscow.pm mailing list
    moscow-pm на pm.org | http://moscow.pm.org



  --
  Alexander
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131226/e59d2de7/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm