как получить файлы для Mojolicious из каталога

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

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";
}

Любая помощь приветствуется.

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

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";
    }
}

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


person tlialin    schedule 20.10.2014    source источник
comment
Это звучит почти так, как будто вы просто спрашиваете, как читать каталог? Разве вы не видели readdir или glob?   -  person Miller    schedule 21.10.2014
comment
Да, я пробовал что-то подобное, но было полно ошибок. Я опубликую то, что я пробовал.   -  person tlialin    schedule 21.10.2014


Ответы (1)


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

    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 ?
    }
}
person Miller    schedule 21.10.2014