Witam.
Jak plik ściągany wgetem w skrypcie perla (np. poprzez wywołanie system) przekazać bezpośrednio do zmiennej lub tablicy w perlu.
Chciałbym pominąć zapisywanie pliku na dysku i późniejsze odczytywanie z dysku aby plik przenieść do tablicy.
Wiem, że można korzystać z LWP lub innych parserów ale pliki, które ściągam to nie zawsze html.
Będę wdzięczny za nakierowanie na jakąś funkcję, podanie koncepcji, może jakiś pomysł na rozwiązanie tego problemu?
Resztę sam znajdę z pomocą Google i napiszę.
Pozdrawiam.
wget i skryp perl, jak przekaza
Chcę stronę www np. bezpośrednio z serwera http odczytać (pobrać) z pomocą[/b skryptu perla, następnie przenieść (przekazać) do tablicy aby później to co ściągnę dalej obrobić w skrypcie.
Wpadłem na pomysł,że można coś takiego zrobić za pomocą programu wget ale przy dużej ilość plików/katalogów robi się problem, bo dysk muli i zaczyna całość działać wolniej. Zastanawiam się nad ramdyskiem, pewnie da się to jakoś szybciej, efektywniej, lepiej zrobić niż zapisywać pliki na dysku wgetem.
A jak czytać bezpośrednio ze strumienia? Czy stronę www można (i czym, ak) przekazać jako strumień?
To co ściągnie wget mam przekazywać do skryptu perla za pomocą:
Kod: Zaznacz cały
kernel.org/index.html
Wpadłem na pomysł,że można coś takiego zrobić za pomocą programu wget ale przy dużej ilość plików/katalogów robi się problem, bo dysk muli i zaczyna całość działać wolniej. Zastanawiam się nad ramdyskiem, pewnie da się to jakoś szybciej, efektywniej, lepiej zrobić niż zapisywać pliki na dysku wgetem.
A jak czytać bezpośrednio ze strumienia? Czy stronę www można (i czym, ak) przekazać jako strumień?
To co ściągnie wget mam przekazywać do skryptu perla za pomocą:
Kod: Zaznacz cały
wget... > skrypt_w_perlu.pl
Pierwsze 4 wyniki z google pod hasłem "perl parse html page"
http://www.foo.be/docs/tpj/issues/vol5_ ... -0003.html
http://www.perl.com/pub/2006/01/19/analyzing_html.html
http://www.degraeve.com/tutorials/tutorial02.php
http://lists.xml.org/archives/xml-dev/2 ... 00283.html - to jest naprawdę rewelacja
praktycznie w jednej linijce
Mam nadzieję, że wybaczysz mi niechęć do przepisywania treści z podanych stron
http://www.foo.be/docs/tpj/issues/vol5_ ... -0003.html
http://www.perl.com/pub/2006/01/19/analyzing_html.html
http://www.degraeve.com/tutorials/tutorial02.php
http://lists.xml.org/archives/xml-dev/2 ... 00283.html - to jest naprawdę rewelacja

Mam nadzieję, że wybaczysz mi niechęć do przepisywania treści z podanych stron

Dziękuję!
Ale:
[INDENT]- zanim napisałem post sam szukałem z pomocą Google,
- w pierwszym moim akapicie jest napisane, że nie chcę lwp,
- parsować htmla będę sam po swojemu i nie to jest problemem.[/INDENT]
Chodzi mi o to jak przekazać ściągniętą stronę www bezpośrednio do skryptu w perlu?
Na chwilę obecną robię to tak, że:
Podpowiedziałeś mi coś o strumieniach i sprawdzę to popołudniu.
Może ktoś jeszcze ma jakieś pomysły? Będę wdzięczny za wszystkie podpowiedzi, sugestie, pomysły.
Ale:
[INDENT]- zanim napisałem post sam szukałem z pomocą Google,
- w pierwszym moim akapicie jest napisane, że nie chcę lwp,
- parsować htmla będę sam po swojemu i nie to jest problemem.[/INDENT]
Chodzi mi o to jak przekazać ściągniętą stronę www bezpośrednio do skryptu w perlu?
Na chwilę obecną robię to tak, że:
- Ściągam stronę za pomocą wget.
- Zapisaną stronę na dysku wczytuję do tablicy w skrypcie perlowym.
- Parsuję tablicę po swojemu.
Podpowiedziałeś mi coś o strumieniach i sprawdzę to popołudniu.
Może ktoś jeszcze ma jakieś pomysły? Będę wdzięczny za wszystkie podpowiedzi, sugestie, pomysły.
Czyli potrzebujesz po prostu odczytać stronę www bezpośrednio w skrypcie perla 
Można np. tak:
Sposobów na odczyt strony bez jej pobierania jest zapewne kilkanaście.
Popatrz również do dokumentacji za opisem funkcji get.

Można np. tak:
Kod: Zaznacz cały
# perl use strict;
# use LWP::Simple;
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
$ua->timeout(120);
my $url='http://yahoo.com/';
my $request = new HTTP::Request('GET', $url);
my $response = $ua->request($request);
my $content = $response->content();
print $content;
Popatrz również do dokumentacji za opisem funkcji get.