Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Значение переменной


Автор: meridian 26.11.2009, 20:12
Привет всем!
Вопрос: могу ли я подставить в имя переменной $cntXXX вместо XXX значения массива, чтобы получилось имя переменной ?

Код

...
#вычисление переменных $cnt0_5, $cnt6_10 и т.д.
....
my @ArrPeriod = qw( 0_5 6_10 11_15 16_20 21_25 26_30 g30 g180 g365);
foreach my $i (@ArrPeriod)
{
    $ent->SetFieldValue($INZ1AGE_T_SUBM_F, $cntXXX);
}

...



Спасибо.

Автор: ginnie 26.11.2009, 20:14
meridian, мне кажется, что лучше вместо этих переменных использовать хэш.

Автор: meridian 26.11.2009, 20:15
Цитата(ginnie @ 26.11.2009,  19:14)
meridian, мне кажется, что лучше вместо этих переменных использовать хэш.

Слушай, ты в корне прав! Спасиб!

Автор: meridian 26.11.2009, 20:50
Цитата(meridian @ 26.11.2009,  19:15)
Цитата(ginnie @ 26.11.2009,  19:14)
meridian, мне кажется, что лучше вместо этих переменных использовать хэш.

Слушай, ты в корне прав! Спасиб!

Я правильно понял ?
Только вопрос... переменные $cntSubm0_5 в кавычках или нет ?

Код

my %ArrPeriod =
(    '0_5'   = > '$cnt0_5',
    '6_10'  = > '$cnt6_10',
    '11_15' = > '$cnt11_15',
    '16_20' = > '$cnt16_20',
    '21_25' = > '$cnt21_25',
    '26_30' = > '$cnt26_30',
    'g30'   = > '$cntg30',
    'g180'  = > '$cntg180',
    'g365'  = > '$cntg365'
);
...
foreach my $key (keys %ArrPeriod)
{
    $ent->SetFieldValue($INZ1AGE_T_SUBM_F, $ArrPeriod($key));
}
...

Автор: Egik2 26.11.2009, 20:53
Ну а вообще, принципиально, при помощи какого-нибудь evala можно такое сделать?

Добавлено через 3 минуты и 16 секунд
Если ты возмешь их в одинарные кавычки, получится, значения хэша - просто строки вида '$cnt0_5', и никаких переменных
Чтобы были переменные, надо без кавычек.
Только эти $cnt0_5 где-нить до этого надо инициализировать.

Добавлено через 11 минут и 8 секунд
А первую задумку можно реализовать так:

my @ArrPeriod = qw( 0_5 6_10 11_15 16_20 21_25 26_30 g30 g180 g365);
foreach my $i (@ArrPeriod)
{
    $ent->SetFieldValue($INZ1AGE_T_SUBM_F, eval('$cnt'.$i));
}

Автор: meridian 26.11.2009, 21:53
OK, спасибо!

Автор: ginnie 27.11.2009, 12:28
meridian, скажите, зачем Вам отдельные переменные, почему нельзя в хэш подставить сразу значения?

Код

my %ArrPeriod =
(   '0_5'   => 100,
    '6_10'  => 200,
    '11_15' => 300,
...
);



Автор: meridian 27.11.2009, 14:38
Цитата(ginnie @ 27.11.2009,  11:28)
meridian, скажите, зачем Вам отдельные переменные, почему нельзя в хэш подставить сразу значения?

Код

my %ArrPeriod =
(   '0_5'   => 100,
    '6_10'  => 200,
    '11_15' => 300,
...
);

Переменные вычисляемые, не константы.

Автор: ginnie 27.11.2009, 14:45
meridian, я вопрос про переменные к тому написал, что если они в программе используются редко, то разумнее их совсем заменить на хэш, т.е. в программе вместо $cnt0_5 использовать $ArrPeriod{0_5}.

Автор: meridian 27.11.2009, 14:55
Да нет, вроде используются часто.

Кстати, с eval('$cht'.$i) не получилось
получаю значения

.
Код

..
$hh=eval('$cht'.$i);
print ("hh=$hh, i=$i";
...


выхлоп 

hh=0, i=0,5

а хотел $cht0_5


Автор: ginnie 27.11.2009, 16:07
Цитата(meridian @  27.11.2009,  14:55 Найти цитируемый пост)
выхлоп hh=0, i=0,5а хотел $cht0_5

а если значение $i исправить на '0_5'?

Автор: Egik2 27.11.2009, 18:42
Цитата(meridian @  27.11.2009,  14:55 Найти цитируемый пост)

Код
..
$hh=eval('$cht'.$i);
print ("hh=$hh, i=$i";
...



А чем выражается, то что не работает?
Может проблема в том, что в eval у вас '$cht' вместо '$cnt'?

У меня ваш блок кода отлично отработал
Код

my $cnt0_5 = '123';
my $i = '0_5'; 
my $hh = eval('$cnt'.$i);
print ("hh=$hh, i=$i");


Вывело:
hh=123, i=0_5

Автор: meridian 27.11.2009, 18:44
Цитата(Egik2 @ 27.11.2009,  17:42)
Цитата(meridian @  27.11.2009,  14:55 Найти цитируемый пост)
..
$hh=eval('$cht'.$i);
print ("hh=$hh, i=$i";
...


А чем выражается, то что не работает?
Может проблема в том, что в eval у вас '$cht' вместо '$cnt'?

Опечатка, конечно же '$cnt'

Автор: Egik2 27.11.2009, 18:48
И по прежнему не работает?

Автор: meridian 27.11.2009, 18:48
Цитата(ginnie @ 27.11.2009,  15:07)
Цитата(meridian @  27.11.2009,  14:55 Найти цитируемый пост)
выхлоп hh=0, i=0,5а хотел $cht0_5

а если значение $i исправить на '0_5'?

Все работает. Короче, сам дурак.
Спасибо всем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)