2012-07-26 14 views
2

此代碼未能查出任何它似乎識別鍵:匹配正則表達式細微差別的Perl會引起頭疼嗎?

if($key =~ /upsf|free|ground|sla|pickup|usps/) 

所以我把它改爲:

if($key eq 'upsf' || $key eq 'free' 
    || $key eq 'ground' || $key eq 'sla' 
    || $key eq 'pickup' || $key eq 'usps') 

他們看起來對我來說,它們在功能上等同 ,所以我試圖找出第一個失敗的原因。它是Windows 7下XAMPP下的Perl,但它也是Linux下的Apache2下的Perl。

這打印出「shelf it」 - 無論是在Windows和Linux上。

$key = 'upsf'; 
if($key =~ /^(upsf|free|ground|sla|pickup|usps)$/) { 
    print 'ship it'; 
} else { 
    print 'shelf it'; 
} 
+0

什麼文字你是匹配? '$ key'的價值是什麼?你的第二行實際上等於'/ ^(upsf | free | ground | sla | pickup | usps $] /',而不是'/ upsf | free | ground | sla | pickup | usps /'。 – simbabque 2012-07-26 17:44:52

+1

它應該工作,也許你錯過了別的東西? – perreal 2012-07-26 17:44:53

+7

你的問題是沒有意義的。在給出適當的輸入的情況下,提交的代碼應該可以工作給我們一個簡短的,自包含的和正確的例子(包括輸入)來展示你的問題。我想你會發現,在這種情況下,你的問題是與你的意見。 – TLP 2012-07-26 17:52:38

回答

3

他們不是當量,在第一比較操作符是「=〜」(「包含」), 其中,第二是「EQ」(「明確的比賽,等於」)。

第一次失敗的原因是什麼? $ key的測試值是多少?

$key = 'xxx'; 
if($key =~ /upsf|free|ground|sla|pickup|usps/) { 
    print 'ship it'; 
} else { 
    print 'shelf it'; 
} 

將打印'貨架它'。 例如,$ key ='xusps'會打印'運送它',通過'=〜'運算符(「contains」)進行匹配,這可能不是您的目標。

0

這個怎麼樣:

if ($key =~ /^(?:upsf|free|ground|sla|pickup|usps)$/) { 
    # ... 
} else { 
    # ... 
} 
0

我的厲害!

$custom_script_code =~ s/\`/\'/gs; 
$custom_script_code =~ s/\|\|/%7C%7C/g; 
$custom_script_code =~ s/\|/ /gs; 
$custom_script_code =~ s/%7C%7C/\|\|/g; 
$custom_script_code =~ s/system/System/gs; 
$custom_script_code =~ s/exec/Exec/gs; 
$custom_script_code =~ s/die/Die/gs; 

所以管被第三語句中刪除此:

此代碼是由ClickCart專業,從文件中讀取它和預處理像這樣執行。感謝Kryptronics! (諷刺)perreal的評論已被加上。我不應該爲此得到任何意見。對不起,我浪費了大家的時間!