簡體   English   中英

從Windows運行時,為什么我的Perl腳本找不到文件?

[英]Why can't my Perl script find the file when I run it from Windows?

我有一個Perl腳本,它是使用Perl 5.8在Linux平台上構建的。 但是,現在我嘗試使用相同的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命令提示符下運行時,它給我錯誤,例如:

  • 在rgex.pl第7行經過了無法識別的轉義\\ D。
  • =>在rgex.pl第8行上沒有此類文件或目錄。

請提供有關代碼的一些建議。 謝謝。

\\在包括在雙引號一個Perl串標記等的轉義序列的開頭\\n為換行, \\t為標簽。 由於您希望對\\進行字面處理,因此需要將\\這樣的\\\\轉義為:

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

由於您沒有在字符串中內插任何變量,因此最好使用單引號:

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

(在單引號內, \\並不特殊,除非下一個字符是反斜杠或單引號。)

這些錯誤消息非常清楚。 它們准確地告訴您問題所在的行(不同於一些錯誤消息,盡管它們告訴您Perl首先在哪行,“嘿,等等!”)。

當您遇到這類問題時,請將程序縮小為有問題的行,然后開始進行處理。 首先從第一個錯誤開始,因為它們通常會級聯到以后看到的錯誤。

當您要檢查所獲得的值時,請打印以確保它是您認為的樣子:

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

這將很快向您顯示$file出現問題,並且一旦知道問題出在哪里,便是解決問題的絕大部分方法。

這只是基本的調試技術。

另外,您還缺少很多基礎知識,因此閱讀一個好的Perl教程將極大地幫助您。 perlfaq2perlbook中列出了幾個。 您遇到的許多問題都是學習Perl的前幾章要解決的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM