的-W
警告選項是你的朋友:
$ perl -W sample .pl
Possible unintended interpolation of @companay in string at junk.pl line 1.
Possible unintended interpolation of @dfs in string at junk.pl line 3.
Name "main::companay" used only once: possible typo at junk.pl line 1.
Name "main::dfs" used only once: possible typo at junk.pl line 3.
所以$a
和$c
不包含文字@companay
和@dfs
他們包含一個空的(未定義)數組插入它們的位置。表達式{0,}
相當於*
(意思是零個或多個),所以讓我們來清理它,並且Perl已經有太多標點符號了,所以讓我們刪除不需要的括號。這給我們的唯一匹配的Perl沒提醒我們:
print "matched" if $b =~ /\w+:\s*\w+[,\w+]*/ ;
這是很好的,除了你可能是指使用分組括號的正則表達式的最後部分,而不是「字符類的零個或多個字符的字符串含,
\w
和+
修復這一切的產量:。
$a ='SCNSC: [email protected]';
$b ='alerts: nek';
$c ='daily-report: tasd,dfgd,fgdfg,dfgdf,[email protected]';
print "matched\n" if $a =~ /\w+:\s*\[email protected]\w+\.\w+/ ;
print "matched\n" if $b =~ /\w+:\s*\w+(,\w+)*/ ;
print "matched\n" if $c =~ /\w+:\s*\w+(,\w+)*/ ;
已經匹配的所有字符串注意\w
不包含字符@
所以它們匹配,但也許不正是你想要的
來源
2010-06-10 12:27:27
msw
讓愚蠢的錯誤根據反應而未經處理,否則反應就變得沒有意義。這就是爲什麼我回滾你的編輯。 – msw 2010-06-10 12:51:07
如果您曾經使用'use strict;使用警告;'從一開始你的所有代碼中,問題就會變得明顯。現在你知道了,所以你永遠不會再忽略它。對? – Ether 2010-06-10 15:02:15