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

时间:2010-09-29 05:51:00

标签: 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 );
}

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

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

请对代码提出一些建议。感谢。

2 个答案:

答案 0 :(得分:7)

用双引号括起来的Perl字符串中的\标记转义序列的开头,如换行符\n,标签\t。由于您希望\按字面意思对待,因此您需要像\一样转义\\

my $file = "C:\\Documents and Settings\\Desktop\\logfiles.log";

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

my $file = 'C:\Documents and Settings\Desktop\logfiles.log';

(在单引号内,\并不特殊,除非下一个字符是反斜杠或单引号。)

答案 1 :(得分:2)

这些错误消息非常清楚。它们确切地告诉你问题所在的行(不像一些错误消息告诉你Perl首先在哪里,“嘿,等一下!”)。

当您遇到这些问题时,请将程序缩减为有问题的行并开始处理它们。首先从第一个错误开始,因为它们经常级联到您稍后看到的错误。

如果要检查所获得的值,请将其打印出来以确保它符合您的预期:

 my $file = "C:\\D....";
 print "file is [$file]\n";

这会很快向您展示$file存在问题,一旦您知道问题出在哪里,您就可以解决问题了。

这只是基本的调试技术。

此外,您缺少相当多的基础知识,因此通过一个好的Perl教程将对您有所帮助。 perlfaq2perlbook中列出了几个。您所遇到的许多问题都是 Learning Perl 在前几章中讨论的问题。