如何在perl中添加斜杠分隔符

时间:2013-12-06 15:21:23

标签: perl

我有以下命令

如何在perl中的v1和bin之间添加“\”(路径)来表示:c:\path\bin 作为v1 = c:\path

system(dirname($v1) . $bin . " " . $trinp);

有人可以为perl推荐教程吗?

由于

3 个答案:

答案 0 :(得分:4)

如果您尝试创建路径,使用File::Spec是个好主意。它是一个核心模块,因此它已经存在于您的系统中。

use strict;
use warnings;
use File::Spec;

my @path = qw(C: path bin);
my $path = File::Spec->catdir(@path);
print $path;

Windows中的输出:

C:\path\bin

如果您希望模拟另一个操作系统,可以为其选择适当的模块,例如

use File::Spec::Win32;
use File::Spec::Unix;

至于我自己,如果我使用Unix版本,我会得到输出:

C:/path/bin

(正斜杠注意事项)

答案 1 :(得分:0)

您提出的问题有多个答案。只需要反斜杠以形成Windows路径,就需要转义反斜杠,这将解决您的直接问题:

system($v1 . "\\" . $bin . " " . $trinp);

然而,有一些改进。首先,您可以使用Perl的插值使其更易于阅读:

system("$v1\\$bin $trinp");

您也可以使用Unix风格的正斜杠,因为Windows了解这些,并防止所谓的“反斜视”:

system("$v1/$bin $trinp");

然而,更好的方法是使用Path::Class在任何操作系统上生成路径。

此外,如果$ trinp(或任何其他变量)包含shell元字符(例如|以管道输入另一个命令),则代码中可能存在安全问题。如果您提供了system()函数的参数列表,它将直接将这些参数传递给命令而不是shell。您可能还想检查命令是否成功,并在失败时执行一些有用的操作(例如die()ing):

system("$vi/$bin", $trinp) == 0
   or die "Couldn't run $vi/$bin: $!";

我将把它作为练习让你将我的最后一个例子转换为使用Path :: Class。

[编辑正确使用system()的错误使用,它返回运行的命令的状态,该命令的成功为零。我把它与更常见的其他Perl函数混淆了,这些函数返回非零表示成功。]

答案 2 :(得分:0)

互联网上有许多非常可疑的Perl教程。 Perl Tutorial Hub是找到质量更好的好地方。