当我从Windows运行它时,为什么我的Perl脚本找不到该文件?

Jav*_*oob 1 windows perl command-prompt

我有一个使用Perl 5.8在Linux平台上构建的Perl脚本.但是现在我尝试在具有相同Perl版本的Windows平台命令提示符下运行Perl脚本.

我正在使用这个命令,perl rgex.pl但它给了我一大堆错误,在我看来它已经在脚本本身已经解决了.奇怪的是我能够运行另一个Perl脚本而不会出现由打印,输入等简单函数组成的问题.

代码:

#!/usr/bin/perl

use warnings;
use strict;
use Term::ANSIColor;

my $file = "C:\Documents and Settings\Desktop\logfiles.log";
open LOG, $file or die "The file $file has the error of:\n =>  $!";

my @lines = <LOG>;
close (LOG);

my $varchar = 0;

foreach my $line ( @lines ) {
if ( $line =~ m/PLLog/ ) 
{
    print("\n\n\n");
my $coloredText = colored($varchar, 'bold underline red');
print colored ("POS :: $coloredText\n\n", 'bold underline red');
$varchar ++;        
}
print( $line );
}
Run Code Online (Sandbox Code Playgroud)

当我在Windows命令提示符下运行它给我错误,如:

  • 无法识别的转义\ D在rgex.pl第7行传递.
  • => rgex.pl第8行没有这样的文件或目录.

请提供一些关于代码的建议.谢谢.

cod*_*ict 7

\用双引号括起来的Perl字符串中的A 标记了\n换行符的开头,例如换行符,\t用于制表符.既然你想要\从字面上对待你需要\像以下\\一样逃避:

my $file = "C:\\Documents and Settings\\Desktop\\logfiles.log";
Run Code Online (Sandbox Code Playgroud)

由于您没有在字符串中插入任何变量,因此最好使用单引号:

my $file = 'C:\Documents and Settings\Desktop\logfiles.log';
Run Code Online (Sandbox Code Playgroud)

(单引号内,\除非下一个字符是反斜杠或单引号,否则不是特殊的.)

  • 在这种情况下最好使用单引号,因为不需要变量插值. (5认同)