Почему мой Perl-скрипт не может найти файл при запуске из Windows? - PullRequest
1 голос
/ 29 сентября 2010

У меня есть Perl Script, который был построен на платформе Linux с использованием Perl 5.8.Однако сейчас я пытаюсь запустить Perl Script в командной строке платформы 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выдает сообщение об ошибке, например:

  • Нераспознанный escape \ D, пропущенный в строке 7 rgex.pl.
  • => Нет такого файла или каталога в строке 8 rgex.pl

Пожалуйста, дайте несколько советов по кодам, пожалуйста.Спасибо.

Ответы [ 2 ]

7 голосов
/ 29 сентября 2010

A \ в строке Perl, заключенной в двойные кавычки, обозначает начало escape-последовательности, например \n для новой строки, \t для табуляции.Поскольку вы хотите, чтобы \ обрабатывался буквально, вам нужно экранировать \ как \\ как:

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

Поскольку вы не интерполируете какие-либо переменные в строке, лучше использовать одинарные кавычки:

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

(Внутри одинарных кавычек \ не является специальным, если следующий символ не является обратной косой чертой или одинарной кавычкой.)

2 голосов
/ 29 сентября 2010

Эти сообщения об ошибках довольно понятны.Они точно указывают, в каких строках возникают проблемы (в отличие от некоторых сообщений об ошибках, в которых сначала указывается строка, где Perl, хотя «Эй, подожди минутку!»).

Когда вы сталкиваетесь с такими проблемами, уменьшитеВ программе просто проблемные строки и начинайте над ними работать.Сначала начните с первых ошибок, так как они часто касаются ошибок, которые вы видите позже.

Когда вы хотите проверить полученное значение, распечатайте его, чтобы убедиться, что это то, что вы думаете:

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

Это бы очень быстро показало вам, что возникла проблема с $file, и как только вы узнаете, где находится проблема, вы в большинстве случаев решите ее.

Это просто базовая техника отладки.

Кроме того, вы упускаете немало основ, так что прохождение хорошего учебника по Perl очень поможет вам.Есть несколько перечисленных в perlfaq2 или perlbook .Многие проблемы, с которыми вы сталкиваетесь, - это вещи, с которыми Learning Perl имеет дело в первой паре глав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...