The OpenNET Project / Index page

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

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

"запись в память вместо файла"  +/
Сообщение от erl500 email on 15-Апр-14, 12:57 
Есть shell-скрипт который создает .txt файл в заданном формате.
Далее перл скрипт скачивает файлы по ссылкам из этого .txt файла.
Данные в .txt файле выглядят как:

<name> <date> <url1> <url2>

Perl-скрипт начинается так:

...
my $file = "url_file";

open FH, $file or die "can't open $file: $!";

for (;;) {
    exit if (stat(FH))[3] == 0;

    while (<FH>) {
        chomp;

        # razbivaem stroky splitom
        my @str = split(" ", $_);

        $usr = $str[0]; #name
        $dir = $str[1]; #date
        $url = $str[2]; #link1
        $url2= $str[3]; #link2
...

Возможно ли вместо
my $file = "url_file";
вставить сразу вызов шелл-скрипта, чтобы _не_использовать .txt файл вообще, а сразу обрабатывать вывод перлом?

Ответить | Правка | Cообщить модератору

Оглавление

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


1. "запись в память вместо файла"  +/
Сообщение от Pahanivo (ok) on 15-Апр-14, 13:42 
> Возможно ли вместо
> my $file = "url_file";
> вставить сразу вызов шелл-скрипта, чтобы _не_использовать .txt файл вообще, а сразу обрабатывать
> вывод перлом?

my $file = `man man`;
вы хотябы первые 10 страниц из любой книжки по перлу прочитайте чтоле ...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "запись в память вместо файла"  +/
Сообщение от XAnder (ok) on 15-Апр-14, 13:59 
> Возможно ли вместо
> my $file = "url_file";
> вставить сразу вызов шелл-скрипта, чтобы _не_использовать .txt файл вообще, а сразу обрабатывать
> вывод перлом?

Если этот шелл-скрипт может выводить в STDOUT, то как-то так:

my $file = "script.sh|";

В документации к функции open это хорошо описано.

Кстати, почему бы там дальше не писать так:

my ($usr, $dir, $url, $url2) = split;

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "запись в память вместо файла"  +/
Сообщение от upf (ok) on 15-Апр-14, 15:02 
>
my $file = "script.sh|";

простите, а классически через косой апостроф`/path/script` нынче уже не модно?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "запись в память вместо файла"  +/
Сообщение от XAnder (ok) on 15-Апр-14, 15:57 
>>
my $file = "script.sh|";

> простите, а классически через косой апостроф`/path/script` нынче уже не модно?

Это разные вещи. "Косой апостроф" вернёт вывод программы как строку. А open FH, "proga|" откроет конвейер (pipe), из которого можно читать, как из файла. Первый способ хорош, если вывода немного, и выводится он быстро. Второй - более универсальный.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "запись в память вместо файла"  +/
Сообщение от upf (ok) on 15-Апр-14, 16:33 
> Первый способ хорош, если вывода немного, и выводится он быстро.
> Второй - более универсальный.

нууу у автору тут вариантов масса просто:
http://perldoc.perl.org/perlop.html#I%2fO-Operators
перл всетаки )) и первый и второй способ описаны, и сотый, и стопервый )))

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "запись в память вместо файла"  +/
Сообщение от XAnder (ok) on 15-Апр-14, 17:04 
>> Первый способ хорош, если вывода немного, и выводится он быстро.
>> Второй - более универсальный.
> нууу у автору тут вариантов масса просто:
> http://perldoc.perl.org/perlop.html#I%2fO-Operators
> перл всетаки )) и первый и второй способ описаны, и сотый, и
> стопервый )))

Это верно, за что и любим Перл :-) Слово "способ" было не очень удачным, скорее "подход" - взять всё сразу или кусочками. А из способов ещё можно отметить IPC::Open2/3 и довольно удобный IPC::Run.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "запись в память вместо файла"  +/
Сообщение от Pahanivo (ok) on 15-Апр-14, 20:14 
> Это верно, за что и любим Перл :-) Слово "способ" было не
> очень удачным, скорее "подход" - взять всё сразу или кусочками. А
> из способов ещё можно отметить IPC::Open2/3 и довольно удобный IPC::Run.

упрекну лишь в том что подход и способ это синонимы ...

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

3. "запись в память вместо файла"  +/
Сообщение от михалыч (ok) on 15-Апр-14, 14:26 
Объединить и переписать.
1. всё на sh, переписав perl скрипт, скачивать файлы через wget
2. всё на perl, переписав sh скрипт, скачивать файлы через wget, curl
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "запись в память вместо файла"  +/
Сообщение от pavlinux (ok) on 16-Апр-14, 15:46 
> 2. всё на perl, ... скачивать файлы через wget, curl

Неувязочка.

use File::Fetch;
my $url = 'http://www.example.com/file.txt';
my $ff = File::Fetch->new(uri => $url);
my $file = $ff->fetch() or die $ff->error;

иль

use LWP::Simple;

getstore("http://www.example.com/file.txt", "/tmp/file.txt");


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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