The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"работа с массивом"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"работа с массивом" 
Сообщение от XPurple emailИскать по авторуВ закладки(ok) on 15-Ноя-05, 11:12  (MSK)
Объясните: почему корректно отрабатывает код:
#!/usr/bin/perl
@massiv_digit=("13","77K","22M");
$limit=scalar @massiv_digit;
while ($i < $limit)
{

if ($massiv_digit[$i]=~m/K$/)
{
$massiv_digit[$i]=$massiv_digit[$i]*1000;
}
if ($massiv_digit[$i]=~m/M$/)
{
$massiv_digit[$i]=$massiv_digit[$i]*1000000;
}
$massiv_digit_all=$massiv_digit_all+$massiv_digit[$i];
$i++;
}

print "\n";
print "$massiv_digit_all\n";

В итоге суммируется 13+77000+22000000
и получается 22077013
Написал я, но честно говоря сам не пойму, почему члены массива воспринимаются как числа.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "работа с массивом" 
Сообщение от mthawk emailИскать по авторуВ закладки(ok) on 15-Ноя-05, 12:39  (MSK)
>Объясните: почему корректно отрабатывает код:
>#!/usr/bin/perl
>@massiv_digit=("13","77K","22M");
>$limit=scalar @massiv_digit;
>while ($i < $limit)
>{
>
>if ($massiv_digit[$i]=~m/K$/)
>{
>$massiv_digit[$i]=$massiv_digit[$i]*1000;
>}
>if ($massiv_digit[$i]=~m/M$/)
>{
>$massiv_digit[$i]=$massiv_digit[$i]*1000000;
>}
>$massiv_digit_all=$massiv_digit_all+$massiv_digit[$i];
>$i++;
>}
>
>print "\n";
>print "$massiv_digit_all\n";
>
>В итоге суммируется 13+77000+22000000
>и получается 22077013
>Написал я, но честно говоря сам не пойму, почему члены массива воспринимаются
>как числа.


Видишь ли. В этом Сила и Мощь перла - контексты.
Одна и та же переменная в разных контекстах будет трактоваться по разному.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "работа с массивом" 
Сообщение от XPurple emailИскать по авторуВ закладки(ok) on 15-Ноя-05, 13:02  (MSK)
>Видишь ли. В этом Сила и Мощь перла - контексты.
>Одна и та же переменная в разных контекстах будет трактоваться по разному.

if ($massiv_digit[$i]=~m/M$/)
$massiv_digit[$i] после этого становится числом судя по-всему ?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "работа с массивом" 
Сообщение от rWizard emailИскать по авторуВ закладки(??) on 15-Ноя-05, 21:07  (MSK)
>if ($massiv_digit[$i]=~m/M$/)
>$massiv_digit[$i] после этого становится числом судя по-всему ?
Переменная трактуется как число, если к ней обратиться как к числу, например применив арифметический оператор.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "работа с массивом" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 15-Ноя-05, 21:21  (MSK)
>Написал я, но честно говоря сам не пойму, почему члены массива воспринимаются
>как числа.

Для арифметики Perl число не обязательно должно оканчиваться на $, допустим любой символ \D. В зависимости от контекста даже 9.1 может оказаться целым числом 9.

А код выше я бы переписал так -

my %subst = ( 'K' => '000', 'M' => '000000', 'T' => '000000000', );
my $subst = join ('|', keys %substitute);

map { s/$subst/$subst{$1}/; $massiv_digit_all += $_; } @massiv_digit

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "работа с массивом" 
Сообщение от XPurple emailИскать по авторуВ закладки(ok) on 16-Ноя-05, 06:18  (MSK)
Спасибо друзья, все понятно.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру