имя автора и название его произведения, например "Лев Николаевич Толстой" и "Три дня в деревне". Я пытаюсь вытащить их, используя захватывающие группы и переименовать, чтобы получилось " Лев_Николаевич_Толстой__Три_дня_в_деревне.txt" для этого я использую такую конструкцию:
my $author = "";
my $book = "";
if ($ARGV[0]) {
my $fh;
open( $fh, '<', "$ARGV[0]" ) or die $!;
while (<$fh>) {
if( "$_" =~ m#<a href="/b/\d+">(?<book>.*?)</a>.*?<a href="/a/\d+">(?<author>.*?)</a># ) {
say "$+{author}";
say "$+{book}";
$author = "$+{author}";
$author =~ s/\s/_/g;
$book = "$+{book}";
$book =~ s/\s/_/g;
say "$author" . "__" . "$book" . ".txt";
}
}
close( $fh );
}
При запуске скрипта, получаю такой вывод:
❯ ./get-name-book.pl read.html
Лев Николаевич Толстой
Три дня в деревне
Use of uninitialized value $+{"book"} in string at ./get-name-book.pl line 24, <$fh> line 1.
Лев_Николаевич_Толстой__.txt
Возникает ошибка "Use of uninitialized value $+{"book"}" при том, что строчкой выше эта переменная выводится успешно. Подскажите, пожалуйста, как исправить?
Стикер
Почему же он выводит правильное название в строке say "$+{book}";, если не сработал
Обсуждают сегодня