perl \N{}上缺少大括号

iyfjxgzm  于 2023-03-09  发布在  Perl
关注(0)|答案(2)|浏览(144)

我是Perl的新手。这应该是简单的代码。我想把所有的文件从源文件夹移动到目标文件夹。但这里是困难的部分。如果源文件夹中的数据是重复的,MD5或类似的散列,而不仅仅是名称日期和大小,我希望它从源文件夹中删除。
这是我用来测试的代码。

use File::Copy;

my $sourceFile = "H:\New Folder\TWH.mp4";
my $destinationFolder = "I:\New Folder\TWH.mp4";

my $destinationFile = $destinationFolder . "/" . (split("/", $sourceFile))[-1];
copy($sourceFile, $destinationFile) or die "Copy failed: $!";
if (-e $destinationFile) {
unlink $sourceFile;
}

检查源和目标之间的匹配。如果源和目标除元数据外完全相同,则删除源。否则,复制源,然后从源中删除。

csbfibhn

csbfibhn1#

\在双引号字符串常量中有特殊含义,因此需要将其转义。

my $sourceFile = "H:\\New Folder\\TWH.mp4";
my $destinationFolder = "I:\\New Folder\\TWH.mp4";

由于在单引号字符串常量中只有\和分隔符需要转义,因此也可以使用以下代码:

my $sourceFile = 'H:\New Folder\TWH.mp4';
my $destinationFolder = 'I:\New Folder\TWH.mp4';

最后,由于Windows接受\/作为目录分隔符,因此您还可以使用以下命令:

my $sourceFile = "H:/New Folder/TWH.mp4";
my $destinationFolder = "I:/New Folder/TWH.mp4";
8cdiaqws

8cdiaqws2#

\N{}序列允许您按名称指定字符:

$ perl -C -le 'print "\N{SNOWMAN}"'
☃

因此,当Perl看到\N时,它期望在它后面有大括号和名称:

$ perl -C -le 'print "\N"'
Missing braces on \N{} at -e line 1, within string
Execution of -e aborted due to compilation errors.

$ perl -C -le 'print "\N{}"'
Unknown charname '' at -e line 1, within string
Execution of -e aborted due to compilation errors.

这与正则表达式\N不同,后者表示“不是换行符”,因为\n是换行符。

相关问题