对于具有特殊字符的文件,perl取消链接失败

对于具有特殊字符的文件,perl取消链接失败,perl,special-characters,unlink,Perl,Special Characters,Unlink,Unix系统正在为Windows工作站托管共享文件夹。 我编写了一个脚本来删除MS products创建的旧临时文件;但它不起作用。 我编写此代码片段是为了重现这个问题: use strict; use warnings; my $fn = '~$557.222 King Street.doc'; system( 'touch', $fn ); system( 'ls -l *.doc' ); unlink '$fn' or warn "$! $fn"; 此脚本生成: -rw-r--

Unix系统正在为Windows工作站托管共享文件夹。 我编写了一个脚本来删除MS products创建的旧临时文件;但它不起作用。 我编写此代码片段是为了重现这个问题:

use strict;
use warnings;

 my $fn = '~$557.222 King Street.doc';
 system( 'touch', $fn );
 system( 'ls -l *.doc' );
 unlink '$fn' or warn "$! $fn";
此脚本生成:

-rw-r--r--  1 fbax  fbax  0 May 18 21:33 ~$557.222 King Street.doc
No such file or directory ~$557.222 King Street.doc at ../qTest.pl line 8.

我尝试了许多变化;他们都失败了。如何使取消链接删除此文件?

'$fn'
生成三个字符串
$fn
,而不是变量
$fn
的值。替换

unlink '$fn'


'$fn'
生成三个字符串
$fn
而不是变量
$fn
的值。替换

unlink '$fn'


当我在测试诸如
取消链接
重命名
之类的行时,我通常会先使用
打印
,这样我就可以在做蠢事之前查看参数。这样,您会立即看到问题:

# unlink '$fn' or warn ...
print '$fn' or warn ...
这是我使用
$,
的一个地方,该变量保存
打印的字符串,该字符串放在参数之间(
$”
是双引号字符串使用的,这是不同的):


当我测试诸如
取消链接
重命名
之类的行时,我通常会先使用
打印
,这样我就可以在做愚蠢的事情之前看到参数。这样,您就会立即看到问题:

# unlink '$fn' or warn ...
print '$fn' or warn ...
这是我使用
$,
的一个地方,该变量保存
打印的字符串,该字符串放在参数之间(
$”
是双引号字符串使用的,这是不同的):


首先:删除
取消链接
命令中
'$fn'
周围的单引号。否则,您将尝试删除名为
$fn
的文件,而不是实际文件。谢谢!我在我的原始代码中尝试了这一点;但事实证明,该脚本中还有另一个编码错误:(现在全部修复。作为初学者:在
取消链接
命令中删除
'$fn'
周围的单引号。否则,您将尝试删除名为
$fn
的文件,而不是实际文件。谢谢!我在原始代码中尝试了此操作;但该脚本中出现了另一个编码错误。:(现在全部修复)。