我有一个使用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命令提示符下运行时,它会给出错误,例如:
请对代码提出一些建议。感谢。
答案 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教程将对您有所帮助。 perlfaq2或perlbook中列出了几个。您所遇到的许多问题都是 Learning Perl 在前几章中讨论的问题。