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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение информации внутри скрипта 
:(
    Опции темы
Suppir
Дата 2.10.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день!


Иногда использую конструкцию __DATA__ для хранения описания программы внутри pl-скрипта.
Также использую while(<DATA>) для чтения оттуда информации.
А можно ли прочитать в переменную не только данные после __DATA__, но и весь текст pl-скрипта?
PM MAIL   Вверх
sir_nuf_nuf
Дата 2.10.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 14
Всего: 31



Нет, то что находится в data исполняться не будет.

Правда туда можно запихнать почти весь Perl скрипт
Код

#!/usr/bin/perl
eval do { local $/ = undef; <DATA> };
__DATA__
use warnings;
use strcit;

.....



Это сообщение отредактировал(а) sir_nuf_nuf - 2.10.2010, 19:33


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Suppir
Дата 2.10.2010, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, попробую!
PM MAIL   Вверх
korob2001
Дата 2.10.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Можно открыть самого себя и прочитать:
Код

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

my $it_me;
open my $fh, "<", $0 or die $!;
$it_me = join("", <$fh>);
close($fh);

print $it_me;



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Suppir
Дата 2.10.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это уже метапрограммирование какое-то smile Интересно, какие фишки с метапрограммированием возможны (и полезны) в Perl?
PM MAIL   Вверх
gcc
Дата 2.10.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



можно поставить в скрипте в самом низу __DATA__

Код

 # вся  <DATA>, $pos - последнее значение
   $pos = do { chomp; $_ } while <DATA>;

........
   # добавить $pos в конец __DATA__  (автор: amg)
    exec qw(perl -0777 -i -pe), 's/$/\n' . $pos . '/', $0;
...........

$pidfile->remove;        #or warn "Couldn't unlink pid file\n";
exit;

__DATA__
137093
137093
140468
141590
142712


Добавлено @ 23:08
Цитата(Suppir @ 2.10.2010,  20:58)
Это уже метапрограммирование какое-то smile Интересно, какие фишки с метапрограммированием возможны (и полезны) в Perl?

http://search.cpan.org/search?query=moose+meta&mode=all

и eval может подгрузить сгенерированный код...

Это сообщение отредактировал(а) gcc - 2.10.2010, 23:44
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 5.10.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть такая хитрая конструкция:
Код

#!/usr/bin/env perl

seek DATA, 0, 0;
my $code = do { local $/; <DATA> };

__DATA__



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


Агент алкомафии
****


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

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



кстате, еще можно сделать русский perl и распарсить? (и название переменных и т.д. в том числе)

только что пример сочинил, работает smile

Код

$i = 5;
печатаем "666" если ($i>4);


Код

#!/usr/bin/perl


sub open_data {
    my $handle = shift;
    local $/ = '';    # Включить режим чтения абзацев
    return <$handle>;
}


sub rus {

 for (@_[0]) {
    s{печатаем}{print}ig; 
    s{если}{if}ig;
 }
 return @_[0];
}


eval rus open_data(*DATA);

die "Exception error: $!" if $@;

# real code:
__DATA__

$i = 5;
печатаем "666" если ($i>4);


PM WWW ICQ Skype GTalk Jabber   Вверх
Suppir
Дата 8.10.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



gcc, надо бы тогда и переменные в кириллице писать smile
говорят, что  в Perl 6 можно любыми юникодовыми символами называть, даже иероглифами smile
PM MAIL   Вверх
KSURi
Дата 8.10.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$ cat t.pl
#!/usr/bin/env perl

use utf8;

my $переменная = функция();
print $переменная;

sub функция {
    my $один = 1;
    my $два  = 2;

    $один + $два;
}
$ perl -l t.pl
3



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


Опытный
**


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

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



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


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

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


 




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


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

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