perl的copy命令中的绝对路径出错了?

use*_*627 0 windows perl copy file path

这是我非常简单的代码,由于某些原因,我无法弄清楚它无法正常工作.

#!/usr/bin/perl
use File::Copy;

$old = "car_lexusisf_gray_30inclination_000azimuth.png";
$new = "C:\Users\Lenovo\Documents\mycomp\simulation\cars\zzzorganizedbyviews\00inclination_000azimuth\lexuscopy.png";

copy ($old, $new)  or die "File cannot be copied.";
Run Code Online (Sandbox Code Playgroud)

我收到无法复制文件的错误.

我知道复制命令没有任何问题,因为如果我将$ new的值设置为没有路径的简单值,它就可以工作.但是,正如我上面写的那样,路径的表现有什么不对?如果我复制并将其复制到Windows资源管理器的地址栏中,它会很好地到达该文件夹.

amo*_*mon 7

提示:在执行复制之前打印出路径.你会看到这个:

C:SERSenovodocumentsmycompsimulationrszzzorganizedbyviewsinclination_000azimuthexuscopy.png
Run Code Online (Sandbox Code Playgroud)

不是我们想要的.反斜杠是Perl中的转义字符,需要自行转义.如果反斜杠序列没有形成有效的转义,那么它将被忽略.使用转义反斜杠,您的字符串将如下所示:

"C:\\Users\\Lenovo\\Documents\\mycomp\\simulation\\cars\\zzzorganizedbyviews\\00inclination_000azimuth\\lexuscopy.png";
Run Code Online (Sandbox Code Playgroud)

或者只是使用正斜杠 - 在大多数情况下,Unix风格的路径也可以在Windows上正常工作.

以下是您不小心使用的转义列表:

  • \U 其余部分是大写的
  • \L 小其余的
  • \ca是一个控制字符(ASCII 1,标题开头)
  • \00 是一个八进制字符,这里是NUL字节
  • \l 小写下一个字符.