2011-12-23 3 views
5

Sto provando a creare uno script che legge i file di testo e li analizza, indipendentemente dal fatto che il file di testo sia online o offline.Perl: legge il file di testo web e lo "apre"

La parte offline è fatto, utilizzando

Ora per la parte on-line, c'è comunque di leggere un file di testo su un sito web e poi "aprire" vero?

Quello che spero di raggiungere è questo:

if ($offline) { 
    open(FILENAME, "anyfilename.txt") 
} 
elsif ($online) { 
    ##somehow open the http web text so that I can do a while (<FILENAME>) later 
} 

analyze_file(); 

sub analyze_file { 
    while (<FILENAME>) {analyze analyze} 
} 

C'è il "get ('http://weblink.com/textfile.txt;)", ma crea una stringa. Non posso fare un po '() con quella stringa.

Qualcuno sa come si può fare?

risposta

11

È semplice, basta usare lo stile open FILEHANDLE,MODE,REFERENCE di open.

use LWP::Simple; 
if ($offline) { 
    open(FILENAME, '<', "anyfilename.txt") 
} 
elsif ($online) { 
    my $text = get 'http://example.com'; 
    open(FILENAME, '<', \$text); 
} 
+0

+1, questo è probabilmente il modo giusto per farlo. Ma a seconda dell'occasione, aprire un handle di file su uno scalare mi sembra molto utile e utilizzerei la mia soluzione proposta per suddividere lo scalare in una serie di linee. – sidyll

+0

@sidyll Perché aprire un handle di file su uno scalare è troppo? BradGilbert Grazie !! –

+0

@ Brad-Gilbert Cosa fa effettivamente la barra in questo contesto di \ $? Normalmente, se nullifica ciò che viene dopo di esso. Perché il codice funziona perché il testo $ in è annullato? –