2016-04-14 12 views
3

実行時に「bibhu」と入力すると、が1回印刷され、jが1になるはずです。しかし、それは起こっていない。なぜ私はj=0になるのですか?誰も私がこのperlプログラムでやっている間違いを指摘できますか?

print "enter\n"; 
$find=<STDIN>; 
$j=0; 
@lines=qw(bibhu prasanna behera kuni shun jbjdkj);  
foreach (@lines) { 
    if ($_ =~ /$find/) { 
     print "$_\n"; 
     $j=$j+1; 
    } 
} 
print "$j\n"; 
+0

を使うのか?あなたの現在のプログラムは一致するものを返します – fugu

答えて

7

は、あなただけのchompを呼び出して、入力から改行を削除する必要があります。それがなければ

chomp($find = <STDIN>); 

、プロンプトで「bibhu」と入力すると、$find"bibhu\n"に等しくなります。ここで

1

スクリプトの少し改良版 - ルーカスT.が書かれているように、あなたはchompで入力した文字列の末尾に改行を削除する必要があります。

#!/usr/bin/perl -w 

use strict; 

print "enter\n"; 
chomp(my $find=(<STDIN>)); 
my $j=0; 
my @lines=qw(bibhu prasanna behera kuni shun jbjdkj);  
foreach (@lines) { 
    if (/$find/o) { 
     print "$_\n"; 
     $j=$j+1; 
    } 
} 
print "$j\n"; 
+0

コマンドラインまたはシバンで '-w'を避けてください。 'use warnings'が非常に好まれていて、' all warnings 'は理想的です。私は個人的には '警告を使用するqw/all FATAL /'が好きです。警告が出たらプログラムを終了させます – Borodin

0

私は他の方法でラウンドを考えています:あなたはifであなたの$_\n追加することができます。

... 
if ("$_\n" =~ /$find/) { 
... 
0

理由は、あなたの入力が改行文字で含まれています。したがって、改行を許可するには、改行を入力または正規表現から削除する必要があります。

入力から改行を削除してください。chomp上記のように他の答え。

正規表現の空白や改行を許可するには、x flagフラグを使用する必要があります。

print "enter\n"; 
$find=<STDIN>; 
$j=0; 
@lines=qw(bibhu prasanna behera kuni shun jbjdkj);  
foreach (@lines) { 
    if ($_ =~ /$find/x) { 
    print "$_\n"; 
    $j=$j+1; 
    } 
} 
print "$j\n"; 

しかし、より良いあなたはあなたの配列が `foobibhubar`が含まれている場合、あなたが期待する何結果ムシャムシャ食べる

関連する問題