我在perl中作为命令行参数传递给文件的完整路径。 例如
myscript.pl C:\Dir\myfile.txt
在myscript.pl中,我有
my $full_path = shift;
print $full_path;
当我这样做时,我的输出是
C:Dirmyfile.txt
我真正想要的是C:\Dir\myfile.txt
但是当我以
myscript.pl 'C:\Dir\myfile.txt'
我的输出是C:/Dir/myfile.txt
。现在它有正斜杠而不是反斜杠。我怎样才能得到我想要的东西? (与传入的内容相同,带有反斜杠的文件路径)
我需要运行能够在Windows环境中的 Cygwin 上运行此脚本。请注意,该脚本有更大的用途,但我发布的内容是我遇到的部分。路径是我从其他地方复制的东西,所以我真的不想做用正斜杠或空格替换反斜杠的额外工作。
答案 0 :(得分:1)
使用File::Spec
模块。这简化了将参数传递到脚本的过程,因为您不需要使用斜杠,它还使您的应用程序可以跨操作系统移植。
use File::Spec;
my $full_path = File::Spec->catfile(@ARGV);
print $full_path, "\n";
示例:
perl myscript.pl C: Dir myfile.txt
C:\Dir\myfile.txt
或者,如果您需要使用完整路径字符串,请使用以下代替上述代码:
my $full_path = File::Spec->canonpath($ARGV[0]);
示例2:
perl myscript.pl C:\Dir\myfile.txt
<强> - 或 - 强>
perl myscript.pl C:/Dir/myfile.txt
C:\Dir\myfile.txt
示例3(对于Cygwin) - 带单引号的环绕参数:
perl myscript.pl 'C:\Dir\myfile.txt'
C:\Dir\myfile.txt