Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по localtime, задача для тренировки 
:(
    Опции темы
ginnie
Дата 29.9.2008, 14:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемые коллеги! Интересный вопрос задали вчера на perlmonks.org:

Код

#!/usr/bin/perl -w
use strict;

my ($sec, $min, $hour) = (localtime)[0..2];
print "$hour:$min:$sec\n";

($sec, $min, $hour) = localtime[0..2];
print "$hour:$min:$sec\n";


Результат
Код

22:9:50
9:16:24

первое время правильное, второе - нет. Попробуйте объяснить почему!

В первую очередь жду ответов от людей с небольшой (или нулевой) репутацией  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
rcdimon
Дата 29.9.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Ну походу в первом случае списочный контекст, а во втором нет
PM MAIL ICQ   Вверх
arto
Дата 29.9.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# perl -le 'print scalar [0..2]; print scalar localtime 0x8142180'
ARRAY(0x8142180)
Thu Apr 18 19:10:24 1974
#
PM MAIL ICQ   Вверх
ginnie
Дата 29.9.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



rcdimon, если имеется ввиду контекст вызова localtime(), то он в обоих случаях списочный.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 29.9.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Я понял, что localtime принимает [0..2] в кач-ве аргумента (прототип - ;$). Но как это связано с адресом в памяти этого аргумента?


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
arto
Дата 29.9.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc -f localtime получает в качестве параметра число секунд с начала эпохи.

# perl -le 'print scalar localtime [0..2]; print scalar [0..2]; print scalar localtime 0x8142180'
Thu Apr 18 19:10:24 1974
ARRAY(0x8142180)
Thu Apr 18 19:10:24 1974
# 

в данном случае аргумент -- адрес.
PM MAIL ICQ   Вверх
ginnie
Дата 29.9.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Т.к. KSURi и arto уже все рассказали, добавлю, что в сложных ситуациях очень помогает модуль B::Deparse, который парсит программу в структуру, с которой обычно работает интерпретатор, а затем восстанавливает из этой структуры исходный текст программы, при этом некоторые синтаксические конструкции становятся более понятными. Например наш код при обработке с perl -MO=Deparse,-p превращается в

Код

(my($sec, $min, $hour) = (localtime)[(0..2)]);
print("${hour}:${min}:$sec\n");
(($sec, $min, $hour) = localtime([(0..2)]));
print("${hour}:${min}:$sec\n");


нюанс, связанный с использованием числового значения адреса массива в качестве параметра функции localtime() являлся частью запутывания вопроса  smile 

Это сообщение отредактировал(а) ginnie - 29.9.2008, 17:03


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.