[Moscow.pm] Иногда вещи не то, чем кажутся

Alex Shatlovsky shatlovsky на gmail.com
Ср Июн 4 06:45:14 PDT 2008


Здравствуйте,

Исходный код примера:
================================
#!/usr/bin/perl -w

use strict;
use CGI;

sub say { print join "", @_, "\n"; }

my $p = {};
my @arr = (1,2,3);

my $a_ref = \@arr;
$p->{arr} = $a_ref;
say "1. container ref=" . ref $p;
say "1. val=" . $p->{arr};
say "1. ref=" . ref $p->{arr};

my $q = new CGI;
my $pp = $q->Vars();
$pp->{arr} = $a_ref;
say "2. container ref=" . ref $pp;
say "2. val=" . $pp->{arr};
say "2. ref=" . ref $pp->{arr};
================================

Данный пример печатает следующее:
================================
1. container ref=HASH
1. val=ARRAY(0xa02f3a0)
1. ref=ARRAY
2. container ref=HASH
2. val=ARRAY(0xa02f3a0)
2. ref=
================================

Обратите внимание на последние 2 строчки: при сохранении во второй
хеш ссылки на массив, ссылка превратилась в свое скалярное
представление.

И ведь не сразу сообразишь, где собака зарыта.
Пользуясь случаем, хочу передать пламенный привет разработчикам CGI.pm :-)
Кстати, так и не понял - фича это или баг.

-- 
С уважением,
А.Н.Шатловский



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