2010-09-17 46 views

回答

8

您的問題不明確:您是否想要打印不帶空格的行 或刪除任何前導空格後打印所有行?

@codaddict顯示瞭如何做後者。我將展示如何做前:

#!/usr/bin/perl 

use strict; 
use warnings; 

open my $SARAN, '<', "first.txt" 
    or die "Can't open 'first.txt': $!"; 

while (my $line = <$SARAN>) 
{ 
    print $line unless $line =~ /^\s/; 
} 

close $SARAN; 

注意以下幾點:

  • usestrict將幫助您捕捉 編程錯誤。
  • usewarnings會提醒您 可疑構造。
  • 諸如SARAN之類的粗體文件句柄是包全局變量。使用詞法 文件句柄。
  • 優選open的三參數形式,特別是如果文件名爲 未硬編碼。
  • 在錯誤消息中包含文件名。
  • 既然你不chomp荷蘭國際集團 $lineprint "$line\n"會導致換行符加倍。
+0

+1爲最佳實踐和問題的替代含義。 – Toto 2010-09-17 12:23:45

+0

輕微的步伐。該正則表達式可以簡化爲/ \ s /在這種情況下。無需查找多個主要空白字符。 – 2010-09-17 12:33:22

+0

@davorg更正量詞。但是,該模式仍需要加以錨定。 – 2010-09-17 12:40:21

7

你可以這樣做:

while($line=<SARAN>) { 
    $line=~s/^\s+//; # delete the leading whitespace. 
    print "$line\n"; 
} 

我們使用Perl's substitute operators,讓我們用一個正則表達式匹配並替換成另一個字符串匹配字符串的一部分。

這裏我們使用正則表達式^\s+

  • ^是開始錨。
  • \s是任何空格字符。
  • +量詞來標記一個或多個

我們基本上相匹配,並沒有這實際上意味着刪除它們替換領先的一個或多個空格字符。

相關問題