Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > File::Copy


Автор: micolo 13.3.2008, 09:22
Доброго времени суток!

У меня такая проблема! Всё до банального смешно. 

Код

#!/usr/bin/perl

use Time::localtime;
use File::Copy;

my $times;
my $path1;
my $path2;

$times=sprintf("%02d%02d%02d",
    localtime->mday(),
    localtime->mon()+1,
    localtime->year()-100
);


$path1="D:\ВПП.txt";
$path2="D:\".$times."_pays.txt";


copy($path1,$path2) or die "Copy failed: $!";

print "ready";



При копировании выдаёт ошибку:

Код

Bareword found where operator expected at D:\scripts\ftp_upload1.pl line 18, nea
r ""D:\".$times."_pays"
        (Missing operator before _pays?)
String found where operator expected at D:\scripts\ftp_upload1.pl line 21, near
"copy($path1,$path2) or die ""
  (Might be a runaway multi-line "" string starting on line 18)
        (Missing semicolon on previous line?)
Bareword found where operator expected at D:\scripts\ftp_upload1.pl line 21, nea
r "copy($path1,$path2) or die "Copy"
String found where operator expected at D:\scripts\ftp_upload1.pl line 23, near
"print ""
  (Might be a runaway multi-line "" string starting on line 21)
        (Missing semicolon on previous line?)
Bareword found where operator expected at D:\scripts\ftp_upload1.pl line 23, nea
r "print "ready"
        (Do you need to predeclare print?)
String found where operator expected at D:\scripts\ftp_upload1.pl line 23, at en
d of line
        (Missing semicolon on previous line?)
syntax error at D:\scripts\ftp_upload1.pl line 18, near ""D:\".$times."_pays"
Can't find string terminator '"' anywhere before EOF at D:\scripts\ftp_upload1.p
l line 23.


если ставлю:

Код

$path2="D:\$times_pays.txt";


файл так и копируется (как $times_pays.txt).

Подскажите как правильно скопировать файл с переменной в имени?


Автор: amg 13.3.2008, 09:46
micolo, почитайте, как ведет себя бэкслеш внутри кавычек.
Надо так
Код

$path1="D:\\ВПП.txt";
$path2="D:\\".$times."_pays.txt";
либо так
Код

$path1='D:\ВПП.txt';
$path2='D:\\'.$times.'_pays.txt';

Автор: micolo 13.3.2008, 11:30
Спасибо!

Автор: ramus 18.4.2008, 22:45
А я использую юниксовую нотацию, например

Код

$path2="D:/$times_pays.txt";
$path2="D:/some/path/${times_pays}_${YYMMDD}.txt";

И ничего экранировать не надо  smile 
теоретически наверное плохо (кстати почему?), но работает и на виндах и на юниксах (HP-UX, Linux RHEL)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)