2013-06-03 64 views
1

我認爲這應該是仙女直截了當。我試圖將kml文件的內容設置爲標量(稱爲$ kml)。目前它只存儲kml的第一行。我怎樣才能讓它忽略換行符並在整個文件中讀取?如何在Perl中讀取多行文本到一個標量變量中

我目前有:

$kml = "Scotland_one_inch_1st.kml"; 

open INPUT, "$kml"; 
$content = <INPUT>; 
close INPUT; 

感謝

回答

4

改變記錄輸入分隔符,$/

{ 
    local $/ = undef; 
    open my $INPUT, $kml or die "Unable to open '$kml': $!"; 
    $content = <$INPUT>; 
    close $INPUT or die $!; 
} 

或只使用一個join

open my $INPUT, $kml or die "Unable to open '$kml': $!"; 
$content = join '', <$INPUT>; 
close $INPUT or die $!; 
+0

我試過你的第一個解決方案,它的工作魅力。歡呼聲 – whatahitson

4

使用文件:: Slurp的模塊。

my $text = read_file('filename') ; 
+0

+1這是最簡單和最可維護的方式! –

1

您可以使用一個開關或一組輸入記錄分隔符($/)你的腳本,Perl會啜泣整個文件。爲了方便使用一個襯墊,您可以使用-0IRS設置爲(alomst?)任何東西。

請參閱perlrun這會告訴你haw通過玩-0來設置輸入記錄分隔符。設置-0777-0777)將使perl整個文件完整,因爲沒有具有該值的合法字符。

如果你想發出聲音的腳本文件,但不想設置IRS整個腳本,然後像下面將工作(從perlvar):

open my $fh, "<", "foo" or die $!; 
    local $/; # enable localized slurp mode 
    my $content = <$fh>; 
    close $fh; 

perlvar文檔解釋爲什麼local好是$/的變化。

+0

用她描述的方法你不必安裝'''File :: Slurp''' ...所以** + 1 **對我來說** **; - )**然而''File: :Slurp'''非常小,明確使用它的子例程將允許您處理應用程序可能在其他地方使用的文件讀取方法的範圍。 –

相關問題