2014-10-20 3 views
0

Итак, у меня есть код, и я могу использовать его в терминале отлично, но я не могу понять, как получить несколько файлов для Mojolicious из каталога, а не кормить их 1 на 1. Я супер новичок в perl и могу использовать excel, чтобы сделать 2000 строк и передать их в терминал, но я бы предпочел не делать этого. Любая помощь очень ценится. Вот код:Как получить файлы для Mojolicious из каталога

use lib '/Users/lialin/perl5/lib/perl5'; 
use strict; 
use warnings; 
use feature 'say'; 

use File::Slurp 'slurp'; # makes it easy to read files. 
use Mojo; 
use Mojo::UserAgent; 
use URI; 

#my $html_file = "Ask/Agilent_Technologies_ask.html"; # take file from directory 
my $html_file = shift @ARGV; # take file from command lin 

my $dom = Mojo::DOM->new(scalar slurp $html_file); 
print $html_file ; 

#for my $csshref ($dom->find('a[href]')->attr('href')->each) { 
#for my $link ($dom->find('a[href]')->attr('href')->each) { 
# print $1; 
#say $1 #if $link->attr('href') =~ m{^https?://(.+?)/index\.php}s; 
for my $csshref ($dom->find('a[href]')->attr('href')->each) { 
    my $cssurl = URI->new($csshref)->abs($html_file); 
    print "$cssurl\n"; 
} 

Любая помощь очень ценится.

Приведенный ниже комментарий о том, что использовать, и я пробовал первый метод, но до сих пор не получил glob. Вот то, что я уже пробовал и ошибочный на:

use lib '/Users/lialin/perl5/lib/perl5'; 
use strict; 
use warnings; 
use feature 'say'; 
use File::Slurp 'slurp'; # makes it easy to read files. 
use Mojo; 
use Mojo::UserAgent; 
use URI; 

#my $html_file = "Ask/Agilent_Technologies_ask.html"; # take file from directory 
#my $html_file = shift @ARGV; # take file from command lin 

my $calls_dir = "Ask/"; 
opendir(my $search_dir, $calls_dir) or die "$!\n"; 
my @html_files = grep /\.html$/i, readdir $search_dir; 
closedir $search_dir; 
#print "Got ", scalar @files, " files\n"; 

#my %seen =(); 
foreach my $html_files (@html_files) { 
    my %seen   =(); 
    my $current_file = $calls_dir . $html_files; 
    open my $FILE, '<', $current_file or die "$html_files: $!\n"; 

    my $dom = Mojo::DOM->new(scalar slurp $html_files); 
    print $html_files ; 

    #for my $csshref ($dom->find('a[href]')->attr('href')->each) { 
    #for my $link ($dom->find('a[href]')->attr('href')->each) { 
    # print $1; 
    #say $1 #if $link->attr('href') =~ m{^https?://(.+?)/index\.php}s; 
    for my $csshref ($dom->find('a[href]')->attr('href')->each) { 
     my $cssurl = URI->new($csshref)->abs($html_files); 

     open my $fh, '>', "${html_files}result.txt" or die $!; 
     $fh->print("$html_files\t$_\n"); 

     #print "$cssurl\n"; 
    } 
} 

Я думаю, что нужно натянуть, но использовать тот же один и беспорядок-то вверх. Еще раз спасибо за помощь новичкам.

+0

Это звучит почти как вы просто спрашиваете, как прочитать каталог? Вы не видели ['readdir'] (http://perldoc.perl.org/functions/readdir.html) или [' glob'] (http://perldoc.perl.org/functions/glob.html)? – Miller

+0

Да, я пробовал что-то подобное, но он был полон ошибок. Я отправлю то, что я пробовал. – tlialin

ответ

0

Вы не включили информацию каталога в выходном файле:

open my $fh, '>', "${html_files}result.txt" or die $!; 

Я бы рекомендовал модернизации код, чтобы использовать Path::Class для обработки операций файлов и каталогов для вас совместимым способом кросс платформенной.

Обратите внимание, что это не совсем понятно, что вы пытаетесь сделать с вашим кодом, но это, вероятно, что вы стремитесь к стилистически:

use lib '/Users/lialin/perl5/lib/perl5'; 
use strict; 
use warnings; 
use feature 'say'; 

use Mojo::DOM; 
use Path::class; 
use URI; 

my $dir = dir("Ask/"); 

for my $file ($dir->children) { 
    next if $file->is_dir || $file !~ /\.html$/i; 

    my $data = $html_file->slurp; 
    my $dom = Mojo::DOM->new($data); 

    my $fh = file($file . 'result.txt')->openw; 

    for my $csshref ($dom->find('a[href]')->attr('href')->each) { 
     my $cssurl = URI->new($csshref)->abs($file->basename); # What are you doing with abs ? 

     $fh->print("$file\t$_\n"); # <-- What is $_ supposed to be ? 
    } 
} 
Смежные вопросы