我有以下命令
如何在perl中的v1和bin之间添加“\”(路径)来表示:c:\path\bin
作为v1 = c:\path
system(dirname($v1) . $bin . " " . $trinp);
有人可以为perl推荐教程吗?
由于
答案 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是找到质量更好的好地方。