Есть 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 файл вообще, а сразу обрабатывать вывод перлом?
> Возможно ли вместо
> my $file = "url_file";
> вставить сразу вызов шелл-скрипта, чтобы _не_использовать .txt файл вообще, а сразу обрабатывать
> вывод перлом?my $file = `man man`;
вы хотябы первые 10 страниц из любой книжки по перлу прочитайте чтоле ...
> Возможно ли вместо
> my $file = "url_file";
> вставить сразу вызов шелл-скрипта, чтобы _не_использовать .txt файл вообще, а сразу обрабатывать
> вывод перлом?Если этот шелл-скрипт может выводить в STDOUT, то как-то так:
my $file = "script.sh|";В документации к функции open это хорошо описано.
Кстати, почему бы там дальше не писать так:
my ($usr, $dir, $url, $url2) = split;
>my $file = "script.sh|";простите, а классически через косой апостроф`/path/script` нынче уже не модно?
>>my $file = "script.sh|";
> простите, а классически через косой апостроф`/path/script` нынче уже не модно?Это разные вещи. "Косой апостроф" вернёт вывод программы как строку. А open FH, "proga|" откроет конвейер (pipe), из которого можно читать, как из файла. Первый способ хорош, если вывода немного, и выводится он быстро. Второй - более универсальный.
> Первый способ хорош, если вывода немного, и выводится он быстро.
> Второй - более универсальный.нууу у автору тут вариантов масса просто:
http://perldoc.perl.org/perlop.html#I%2fO-Operators
перл всетаки )) и первый и второй способ описаны, и сотый, и стопервый )))
>> Первый способ хорош, если вывода немного, и выводится он быстро.
>> Второй - более универсальный.
> нууу у автору тут вариантов масса просто:
> http://perldoc.perl.org/perlop.html#I%2fO-Operators
> перл всетаки )) и первый и второй способ описаны, и сотый, и
> стопервый )))Это верно, за что и любим Перл :-) Слово "способ" было не очень удачным, скорее "подход" - взять всё сразу или кусочками. А из способов ещё можно отметить IPC::Open2/3 и довольно удобный IPC::Run.
> Это верно, за что и любим Перл :-) Слово "способ" было не
> очень удачным, скорее "подход" - взять всё сразу или кусочками. А
> из способов ещё можно отметить IPC::Open2/3 и довольно удобный IPC::Run.упрекну лишь в том что подход и способ это синонимы ...
Объединить и переписать.
1. всё на sh, переписав perl скрипт, скачивать файлы через wget
2. всё на perl, переписав sh скрипт, скачивать файлы через wget, curl
> 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");