2012-02-28 11 views
-1

私はどちらも、マッチパターンで 'リテラル'として使用する必要があるメタキャラクタでいっぱいです。 \Qは、文字列内のすべてのメタ文字を\Eまで引用すると仮定していますが、動作しません。Perl、パターンマッチングとメタキャラクタ

どういう意味ですか?あなたは$ww[0]の1に$prevの文字列を比較したいように見えますif (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {

+4

このような2つの正規表現を比較することはできません。より多くのコードを投稿して、何をしようとしているのかを明確にすることができますか? – MattLBeck

+3

「うまくいかない」とはどういう意味ですか?あなたは '$ prev'と' $ ww [0] 'を補間したいのですか?そうではありませんか? – reinierpost

+3

http:// perldocを使用してください。perl.org/warnings.html。 – toolic

答えて

2

これは私に迷惑を与える行です。この場合、正規表現マッチは次のようになります。メタ文字を無視して、www[0]にあるものと同じではありません1$prev場合

$result = $prev !~ /\Q$ww[0]\E/ 

$resultが返されます。それはあなたがやってみたかったのすべてである場合

しかし、あなたにもneを使用する場合があります。

また
if ($prev ne $ww[0]){ 
    #do this if $prev and $ww[0] are not the same 
} 

、@toolicが述べたように、スクリプトの先頭に次の行を追加します。

use warnings; 

これは、スクリプトで発生する可能性のある問題に関するフィードバックを提供します。不在

+0

お世話になりました!私はいつものように事を複雑にしていた。 ($ prev ne $ ww [0])はうまくいきました。 – user1238319

11

=~又は!~の使用は、

/.../ 

よう

/\Q$prev\E/ !~ /\Q$ww[0]\E/ 

($_ =~ /\Q$prev\E/) !~ /\Q$ww[0]\E/ 
0123のための短い

$_ =~ m/.../ 

ための短いです

"" !~ /\Q$ww[0]\E/ 
"1" !~ /\Q$ww[0]\E/ 

あなたは単にたい:左の正規表現のマッチが成功したかどうかに応じて、次のいずれかに相当します

$prev !~ /\Q$ww[0]\E/ # $ww[0] doesn't contains $prev 

あなたが実際にしたい場合

$prev !~ /^\Q$ww[0]\E\z/ # $ww[0] isn't equal to $prev 

次に簡単にすることができます

$prev ne $ww[0] # $ww[0] isn't equal to $prev 

ところで、常にuse strict; use warnings;を使用してください。ここで問題を特定している可能性があります(必ずしもそうではありませんが、値は$_)。

関連する問題