2012-03-13 115 views
-3

由於我不打算進入,我有一個Perl腳本讀取文本文件,然後執行它以建立一個配置。阻止Perl eval在遇到傳入輸入中的空行時停止運行?

當文本文件中有一個空白行被刪除時,空白行後面的所有內容都不會發生,所以我假設P​​erl將空行視爲某種指示,表示它應該停止評估或某事。

有沒有辦法阻止這種行爲?

驗證碼:

open my $CONFIGFILE, '<', $config_file || return 0; 
my $config_code = do{local $/ = q{}; <$CONFIGFILE>}; 
close $CONFIGFILE; 
my $config; 
unless(eval $config_code){ 
    return 0; 
} 
+5

向我們展示一些代碼。否則,這個問題不能回答(或者,答案是「否」。) – 2012-03-13 14:53:38

+3

你假設錯了,所以你的問題是無效的。請向我們提供一些信息,以便我們瞭解實際發生的事情。 – hobbs 2012-03-13 14:58:21

+2

考慮到解釋的行爲,應該非常容易地構建一個簡單的示例腳本來執行相同的操作,並且不管是否相同。如果是這樣,請在此發佈以改善問題。如果沒有,你的理論是錯誤的,你的代碼中有其他東西被破壞。 – DVK 2012-03-13 15:07:27

回答

1

我懷疑你正在閱讀的每一行,操縱它,然後建立一個巨大的字符串的eval(這是再破)。

您有幾種選擇:

1)在配置文件中讀取,跳過任何空行,當你閱讀。 IE瀏覽器,是這樣的:

while(<>) { 
    next if (/^\s*$/); 
    # do $string collection here 
} 
eval($string); 

2)捕獲在一個時間的EVAL結果之一:

while(<>) { 
    $string = super_secret_read_and_modify($_); 
    eval($string); 
} 

以#1和#2你可以放棄的東西,破壞了你的代碼。我懷疑你遇到了問題,因爲你正在評估的數據是無效的。所以你要麼需要修理你的建築,要麼把它分解成更小的部分,以便單件的評估不會阻止其餘的工作。