Perl скрипт, возвращающий 0 при чтении файла - PullRequest
0 голосов
/ 04 февраля 2020

Я просто пытаюсь скопировать файл в другой каталог, прежде чем обработать его. Вот код:

use File::stat;
use File::Copy;
use LWP::UserAgent;
use strict;
use warnings;
use Data::Dumper;
use Cwd qw(getcwd);


my $dir = "\\folder\\music";
my $dir1 = "c:\\temp";

opendir(my $dh, $dir) or die "Cant open directory : $!\n";
#my @list = readdir($dh)

my @files = map { [ stat "$dir/$_", $_ ] }
grep( /Shakira.*.mp3$/, readdir( $dh ) );
closedir($dh);
sub rev_by_date 
{
   $b->[0]->ctime <=> $a->[0]->ctime 
}
my @sorted_files = sort rev_by_date @files;
my @newest = @{$sorted_files[0]};
my $name = pop(@newest);
print "Name: $name\n";
#**********************
#Upto here is working fine



my $new;

open OLD,"<",$name or die "cannot open $old: $!";

отсюда проблема начинается

open(NEW, "> $new") or die "can't open $new: $!"; 
while () 
{ 

print NEW $_ or die "can't write $new: $!";
 } 
close(OLD) or die "can't close $old: $!"; 
close(NEW) or die "can't close $new: $!"; 

Ошибка, которую я получаю: не могу открыть Shakira - Try Everything (Official Video) .mp3: Нет такого файла или каталог в строке copy.pl 49.

, когда я скомпоновываю имя файла, например my $ oldfile = chomp ($ name); тогда ошибка: Имя: Shakira - Try Everything (Official Video) .mp3 старый файл 0 не может открыть 0: нет такого файла или каталога в строке copy.pl 49.

Есть идеи?

1 Ответ

3 голосов
/ 04 февраля 2020

chomp изменяет свой аргумент на месте и возвращает количество удаленных символов. Таким образом, правильное использование -

chomp(my $oldfile = $name);

Кроме того, вы, вероятно, хотели

while (<OLD>) {

вместо

while () {

, который просто повторяется бесконечно.

Более того, вы правильно добавляете $dir/ к имени файла в вызове stat , но вы должны делать это везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...