2012-02-06 65 views
0

因此,我有兩個文件,一個包含我的文本,另一個包含過濾詞。這裏顯示的那個應該是帶有詛咒詞的那個。基本上,我在做的是遍歷文本文件中的每個單詞,並試圖將它們與詛咒單詞進行比較。程序在從文件中讀出單詞時表現出奇怪的行爲

sub filter { 
    $word_to_check = $_; 

    open (FILE2, $ARGV[1]) || die "Something went wrong. \n"; 

    while(<FILE2>) { 
      @cursewords = split; 
      foreach $curse (@cursewords) { 
        print $curse."\n"; 
        if($word_to_check eq $curse) { return "BAD!";} 
      } 
    } 
    close (FILE2); 
} 

這裏是 「罵人的話」:

what is 

這裏是文本文件:

hey dude what is up 

但這裏是什麼地方出了錯。正如你所看到的,我已經打印了一份聲明,看看是否正確檢查了咒語。

hey what 
is 
dude what 
is 
what what 
is 
is what 
is 
up what 
is 

我從字面上不知道爲什麼會發生這種情況。請讓我知道我是否應該發佈更多代碼。

編輯:

AHA!感謝邪惡的奧托。我似乎對我之前提出的另一份印刷聲明感到困惑。現在問題依然存在:我想我沒有正確地檢查字符串的相等性。這裏就是過濾獲取調用:

foreach $w(@text_file_words) 
    { 
      if(filter($w) eq "BAD!") 
      { 
        #do something here 
      } 
      else { print "good!"; } 
    } 

編輯2:沒關係,對我而言更愚蠢。我需要睡一覺,感謝邪惡的奧托。

+1

交更多的代碼,比如什麼叫'filter'。另外,爲你的打印添加一些與衆不同的東西,以確保它不會與其他打印件產生混淆,如'print' - $ 0 - >'';' – 2012-02-06 05:15:56

+0

請更改標題:Perl不是怪罪。你的程序有一個bug,而不是perl(至少在這種情況下)。 – dolmen 2012-02-06 13:57:32

回答

1

變化

$word_to_check = $_; 

$word_to_check = shift; 
0

你需要收集論據,Perl中的數組...

sub myFunction{ 
    ($wordToCheck) = @_; #this is the arg array, if you have more than one arg you just separate what's between the parenthesis with commas. 
} 
相關問題