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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> open 0, "перловый бред" 
:(
    Опции темы
chaos
Дата 31.3.2010, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 6
Всего: 44



объясните пожалуйста принцип работы программы

Код
#!/usr/bin/perl -w

open 0;
print <0>;


интересуют последние 2 строчки smile как так вообще получается что на экран выводится этот же текст  smile 

Заранее благодарен!

Это сообщение отредактировал(а) chaos - 31.3.2010, 09:02
PM WWW   Вверх
Egik2
Дата 31.3.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, классный скрипт.

Как я понимаю, так:
0 - файловый дескриптор STDIN процесса perl. 

командой open 0, мы открываем его еще раз
print <0>; - печатаем его содержимое.

То есть то что получается вполне логично, печатаем, то что получаем на вводе  smile 
Думаю данную штуку можно сделать на любом языке


Это сообщение отредактировал(а) Egik2 - 31.3.2010, 10:26


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
shamber
Дата 31.3.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 18



Egik2, ага соревнования есть, кто короче напишет smile
PM MAIL Jabber   Вверх
chaos
Дата 31.3.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 6
Всего: 44



Egik2, не совсем вкурил. те что Вы написали я это сам понял. но вот про 0 и как там появился текст программы не понял %)

PS мож кто перлдоком кинет по конкретной проблемЕ ? smile

Это сообщение отредактировал(а) chaos - 31.3.2010, 11:46
PM WWW   Вверх
Pfailed
Дата 31.3.2010, 12:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 22
Всего: 39



perldoc open:
Цитата

open FILEHANDLE,EXPR

If EXPR is omitted, the scalar variable of the same name as the FILEHANDLE contains the filename.


Как раз наш случай. Соответственно в качестве имени файла берется переменная $0. А переменная $0 содержит имя файла содержащего данную программу. Соответственно открывается для чтения сам исходник скрипта, считывается в списочном контексте (а значит целиком) и распечатывается.


--------------------
PM MAIL   Вверх
chaos
Дата 31.3.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 6
Всего: 44



Цитата(Pfailed @ 31.3.2010,  09:35)
perldoc open:
Цитата

open FILEHANDLE,EXPR

If EXPR is omitted, the scalar variable of the same name as the FILEHANDLE contains the filename.


Как раз наш случай. Соответственно в качестве имени файла берется переменная $0. А переменная $0 содержит имя файла содержащего данную программу. Соответственно открывается для чтения сам исходник скрипта, считывается в списочном контексте (а значит целиком) и распечатывается.

ок. исходя из Ваших суждений код
Код

#!/usr/bin/perl

open F;
print <F>;


должен сработать, но увы. Пчоему? Или я где-то ошибся?
PM WWW   Вверх
shamber
Дата 31.3.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 18



Какое отношение 
Цитата(chaos @  31.3.2010,  15:08 Найти цитируемый пост)
F

имеет к $0?

PM MAIL Jabber   Вверх
arto
Дата 31.3.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



# cat > aaa
# perl -e '$a = "aaa"; open a; print <a>;'
aa
bb
cc
# 
PM MAIL ICQ   Вверх
amg
Дата 31.3.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



chaos,  чтобы было понятнее, вот так попробуйте smile
Код
#!/usr/bin/perl
$F = $0;
open F;
print <F>;


ЗЫ Это, наверное, нечестный квин, т.к. используются особые свойства одной из переменных.
PM MAIL   Вверх
ginnie
Дата 31.3.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



arto, не понял Ваш пример, не поясните?


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


Эксперт
***


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

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



забыл добавить, что:

# cat > aaa
aaa
bbb
ccc
^D
#
PM MAIL ICQ   Вверх
ginnie
Дата 31.3.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А выводится
Цитата

aa
bb
cc


 smile 


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


Эксперт
***


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

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



угу, сам опешил.
PM MAIL ICQ   Вверх
ginnie
Дата 31.3.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А почему у меня не так?

Код

[ginnie@office ~]$ cat > aaa
aaa
bbb
ccc
[ginnie@office ~]$ perl -e '$a = "aaa"; open a; print <a>;'
aaa
bbb
ccc
[ginnie@office ~]$

 smile 


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


Эксперт
***


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

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



# perl -V:mo
mo='yesssss!';
#
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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