#!/usr/bin/perl
use File::Copy;
print "content-type: text/html \n\n"; #The header
$filetobecopied = "C:\Users\avinash\Desktop\mktg/";
$newfile = "C:\Users\avinash\Desktop\elp/";
copy("$.pdf","$.elp") or die "File cannot be copied.";
以上程序我已经习惯了输出但是得到错误任何人都可以帮我解决代码
答案 0 :(得分:1)
如果使用反斜杠,请对字符串使用单引号,或将反斜杠加倍。在双引号中,许多反斜杠字符具有特殊含义:
my $newfile = "C:\Users\avinash\Desktop\elp/";
print $newfile;
输出:
C:SERSVINASHDESKTOPP/
也有一些隐藏的角色:
0000000: 433a 5345 5253 0756 494e 4153 4844 4553 C:SERS.VINASHDES
0000010: 4b54 4f50 1b4c 502f KTOP.LP/
答案 1 :(得分:0)
您的脚本存在三个大问题。
始终在每个perl脚本中包含use strict;
和use warnings;
。
使用这两个Pragmas是成为更好的程序员可以做的第一件事。此外,如果他们看到您正在进行此基本尽职调查以自行追踪错误,那么您将始终获得专家的更多帮助。
在这种情况下,您实际上会在代码中收到两条警告:
Use of uninitialized value $. in concatenation (.) or string at script.pl line 6.
Use of uninitialized value $. in concatenation (.) or string at script.pl line 6.
因此,您的第copy("$.pdf","$.elp")
行正在插入未定义的变量$.
,因为您无法从文件中读取。
以双引号字符串转义反斜杠
反斜杠在文字字符串定义中具有特殊含义。如果你想在双引号字符串中使用文字反斜杠,那么你需要转义它。
在这种情况下,正在翻译以下内容:
\U
是uc
函数\a
是一个警报代码\D
只是文字D
要解决此问题,您需要使用单引号字符串或转义反斜杠
my $filetobecopied = "C:\\Users\\avinash\\Desktop\\mktg"; # Backslashes escaped
my $filetobecopied = 'C:\Users\avinash\Desktop\mktg'; # Single quotes safer
此外,我无法弄清楚为什么你的两个字符串都有一个正斜杠。
输出错误消息:$!
始终在错误消息中包含尽可能多的信息。在这种情况下,File::Copy
执行以下操作:
所有功能在成功时返回1,在失败时返回0。如果遇到错误,将设置
$!
。
因此,您的or die
语句应包含以下内容:
copy("fromfile","tofile") or die "Can't copy: $!";
为了获得更好的调试信息,您可以包含要发送到复制的参数:
copy("fromfile","tofile") or die "Can't copy fromfile -> tofile: $!";
无论如何,这三件事将帮助您调试脚本。根据您提供的信息,仍然无法完全解释您的意图,但以下是更好格式代码的存根:
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
print "content-type: text/html \n\n"; #The header
# The following is likely wrong, but the best interpretation of your intent for now:
my $filetobecopied = 'C:\Users\avinash\Desktop\mktg.pdf';
my $newfile = 'C:\Users\avinash\Desktop\elp.elp';
copy($filetobecopied, $newfile)
or die "Can't copy $filetobecopied -> $newfile: $!";