對不起,發佈了另一個類似於我之前發佈的問題的問題。我意識到我的問題不是很清楚,可能會導致對答案的誤解。所以我想重寫它並再次提問。Perl:哈希和正則表達式中的鍵問題
我的任務是在2檔(基本配置文件和配置文件)讀取。這兩個文件可以有任意數量的行。線的順序不需要按順序排列。 「!」之後我需要忽略一些事情和「^」。但是,我被卡在忽略「!」的部分和「^」。我能夠將每行存儲在一個散列中的鍵(沒有「!」或「^」之後的東西),但是當我比較時它失敗了。例如,如果文件中有一行「hello!123」,我需要在散列中只存儲「hello」,並將字符串「hello」與另一個散列中的另一個鍵相比較。如果另一個散列中有「hello」鍵,我需要將其打印出來或放入另一個散列。我的程序只能從行「hello!123」放入「hello」,但在與另一個散列中的另一個鍵進行比較時,該部分失敗。
我已經寫另一短的程序,只需要在用戶輸入後取出的東西檢查了我的正則表達式「!」和「^」符號並與另一個散列的另一個鍵進行比較。
這裏是我的錯誤代碼:
my %common=();
my %different=();
#open config file and load them into the config hash
open CONFIG_FILE, "< script/".$CONFIG_FILENAME or die;
my %config;
while (<CONFIG_FILE>) {
chomp $_;
$_ =~ s/(!.+)|(!.*)|(\^.+)|(\^.*)//;
$config{$_}=$_;
print "_: $_\n";
#check if all the strings in BASE_CONFIG_FILE can be found in CONFIG_FILE
$common{$_}=$_ if exists $base_config{$_};#stored the correct matches in %common
$different{$_}=$_ unless exists $base_config{$_};#stored the different lines in %different
}
close(CONFIG_FILE);
沒有人之前有同樣的問題嗎?你做什麼來解決它?
它在「與其他散列中的另一個鍵進行比較時的部分失敗」中究竟有多失敗?你的意思是每行都打印出來嗎? (這是因爲打印沒有條件。)你的正則表達式替換會起作用,但最好寫成's /[!^].*//;'。 – Qtax 2012-02-23 09:30:34